kotlinx.coroutines v1.6.0-RC Release Notes

  • โœ… kotlinx-coroutines-test rework

    • โœ… kotlinx-coroutines-test became a multiplatform library usable from K/JVM, K/JS, and K/N.
    • Its API was completely reworked to address long-standing issues with consistency, structured concurrency and correctness (#1203, #1609, #2379, #1749, #1204, #1390, #1222, #1395, #1881, #1910, #1772, #1626, #1742, #2082, #2102, #2405, #2462 ).
    • โœ… The old API is deprecated for removal, but the new API is based on the similar concepts ([README](kotlinx-coroutines-test/README.md)), and the migration path is designed to be graceful: [migration guide](kotlinx-coroutines-test/MIGRATION.md)

    Dispatchers

    • * Introduced CoroutineDispatcher.limitedParallelism that allows obtaining a view of the original dispatcher with limited parallelism (#2919).
    • Dispatchers.IO.limitedParallelism usages ignore the bound on the parallelism level of Dispatchers.IO itself to avoid starvation (#2943).
    • Introduced new Dispatchers.shutdown method for containerized environments (#2558).
    • ๐Ÿ›  newSingleThreadContext and newFixedThreadPoolContext are promoted to delicate API (#2919).

    ๐Ÿ’ฅ Breaking changes

    • ๐Ÿ— When racing with cancellation, the future builder no longer reports unhandled exceptions into the global CoroutineExceptionHandler. Thanks @vadimsemenov! (#2774, #2791).
    • ๐Ÿ—„ Mutex.onLock is deprecated for removal (#2794).
    • 0๏ธโƒฃ Dispatchers.Main is now used as the default source of time for delay and withTimeout when present(#2972).
      • To opt-out from this behaviour, kotlinx.coroutines.main.delay system property can be set to false.
    • ๐Ÿ— Java target of coroutines build is now 8 instead of 6 (#1589).

    ๐Ÿ› Bug fixes and improvements

    • โšก๏ธ Kotlin is updated to 1.6.0.
    • ๐Ÿ— Kotlin/Native new memory model is now supported in regular builds of coroutines conditionally depending on whether kotlin.native.binary.memoryModel is enabled (#2914).
    • Introduced CopyableThreadContextElement for mutable context elements shared among multiple coroutines. Thanks @yorickhenning! (#2893).
    • ๐Ÿ”€ transformWhile, awaitClose, ProducerScope, merge, runningFold, runingReduce, and scan are promoted to stable API (#2971).
    • โšก๏ธ SharedFlow.subscriptionCount no longer conflates incoming updates and gives all subscribers a chance to observe a short-lived subscription (#2488, #2863, #2871).
    • ๐Ÿ‘ป Flow exception transparency mechanism is improved to be more exception-friendly (#3017, #2860).
    • Cancellation from flat* operators that leverage multiple coroutines is no longer propagated upstream (#2964).
    • SharedFlow.collect now returns Nothing (#2789, #2502).
    • ๐Ÿšš DisposableHandle is now fun interface, and corresponding inline extension is removed (#2790).
    • ๐Ÿ—„ Deprecation level of all previously deprecated signatures is raised (#3024).
    • The version file is shipped with each JAR as a resource (#2941).
    • Unhandled exceptions on K/N are passed to the standard library function processUnhandledException (#2981).
    • A direct executor is used for Task callbacks in kotlinx-coroutines-play-services (#2990).
    • ๐Ÿ“‡ Metadata of coroutines artifacts leverages Gradle platform to have all versions of dependencies aligned (#2865).
    • 0๏ธโƒฃ Default CoroutineExceptionHandler is loaded eagerly and does not invoke ServiceLoader on its exception-handling path (#2552).
    • ๐Ÿ›  Fixed the R8 rules for ServiceLoader optimization (#2880).
    • ๐Ÿ›  Fixed BlockHound integration false-positives (#2894, #2866, #2937).
    • ๐Ÿ‘ป The exception recovery mechanism now uses ClassValue when available (#2997).
    • โšก๏ธ JNA is updated to 5.9.0 to support Apple M1 (#3001).
    • ๐Ÿ—„ Obsolete method on internal Delay interface is deprecated (#2979).
    • ๐Ÿ‘Œ Support of deprecated CommonPool is removed.