kotlinx.coroutines v1.5.0-RC Release Notes

  • Channels API

    • ๐Ÿšš Major channels API rework (#330, #974). Existing offer, poll, and sendBlocking methods are deprecated, internal receiveCatching and onReceiveCatching removed, receiveOrNull and onReceiveOrNull are completely deprecated. Previously deprecated SendChannel.isFull declaration is removed. Channel operators deprecated with ERROR are now HIDDEN.
    • ๐Ÿ†• New methods receiveCatching, onReceiveCatching trySend, tryReceive, and trySendBlocking along with the new result type ChannelResult are introduced. They provide better type safety, are less error-prone, and have a consistent future-proof naming scheme. The full rationale behind this change can be found here.
    • ๐Ÿ“š BroadcastChannel and ConflatedBroadcastChannel are marked as ObsoleteCoroutinesApi in the favor or SharedFlow and StateFlow. The migration scheme can be found in their documentation. These classes will be deprecated in the next major release.
    • callbackFlow and channelFlow are promoted to stable API.

    Reactive integrations

    • All existing API in modules kotlinx-coroutines-rx2, kotlinx-coroutines-rx3, kotlinx-coroutines-reactive, kotlinx-coroutines-reactor, and kotlinx-coroutines-jdk9 were revisited and promoted to stable (#2545).
    • publish is no longer allowed to emit null values (#2646).
    • ๐Ÿ—„ Misleading awaitSingleOr* functions on Publisher type are deprecated (#2591).
    • ๐Ÿ‘• MaybeSource.await is deprecated in the favor of awaitSingle, additional lint functions for Mono are added in order to prevent ambiguous Publisher usages (#2628, #1587).
    • ๐Ÿ‘ ContextView support in kotlinx-coroutines-reactor (#2575).
    • ๐Ÿ— All reactive builders no longer ignore inner cancellation exceptions preventing their completion (#2262, #2646).
    • MaybeSource.collect and Maybe.collect properly finish when they are completed without a value (#2617).
    • All exceptions are now consistently handled according to reactive specification, whether they are considered 'fatal' or not by reactive frameworks (#2646).

    Other improvements

    • Flow.last and Flow.lastOrNull operators (#2246).
    • Flow.runningFold operator (#2641).
    • CoroutinesTimeout rule for JUnit5 (#2197).
    • ๐ŸŽ Internals of Job and AbstractCoroutine was reworked, resulting in smaller code size, less memory footprint, and better performance (#2513, #2512).
    • CancellationException from Kotlin standard library is used for cancellation on Koltin/JS and Kotlin/Native (#2638).
    • ๐Ÿ“š Introduced new DelicateCoroutineApi annotation that warns users about potential target API pitfalls and suggests studying API's documentation first. The only delicate API right now is GlobalScope (#2637).
    • ๐Ÿ›  Fixed bug introduced in 1.4.3 when kotlinx-coroutines-core.jar triggered IDEA debugger failure (#2619).
    • ๐Ÿ›  Fixed memory leak of ChildHandlerNode with reusable continuations (#2564).
    • ๐Ÿ“š Various documentation improvements (#2555, #2589, #2592, #2583, #2437, #2616, #2633, #2560).