kotlinx.coroutines
Library support for Kotlin coroutines in Kotlin/JS.
suspend fun main() = coroutineScope {
launch {
delay(1000)
println("Kotlin Coroutines World!")
}
println("Hello")
}Library support for Kotlin coroutines
Library support for Kotlin coroutines in Kotlin/JS.
suspend fun main() = coroutineScope {
launch {
delay(1000)
println("Kotlin Coroutines World!")
}
println("Hello")
}kotlinx-coroutines-debug JAR file including the module-info.class file twice, resulting in failures in various tooling (#4314). Thanks, @RyuNen344!Flow.stateIn hanging when the scope is cancelled in advance or the flow is empty (#4322). Thanks, @francescotescari!.limitedParallelism (#4330) and during flow collection (#4272).runBlocking failing to run its coroutine to completion in some cases if its JVM thread got interrupted (#4399).Flow.any, Flow.all, and Flow.none (#4212). Thanks, @CLOVIS-AI!kotlinx-coroutines-debug and kotlinx-coroutines-core code to avoid a split package between the two artifacts (#4247). Note that directly referencing kotlinx.coroutines.debug.AgentPremain must now be replaced with kotlinx.coroutines.debug.internal.AgentPremain. Thanks, @sellmair!kotlinx-coroutines-debug, reducing the artifact size and simplifying the build configuration of client code. Thanks, @sellmair!NullPointerException when using Java-deserialized kotlinx-coroutines-core exceptions (#4291). Thanks, @AlexRiedler!CoroutineDispatcher.dispatch instead of raising internal errors (#4091). Thanks, @zuevmaxim!Dispatchers.Default or Dispatchers.IO task after a yield() in rare scenarios (#4248).main() coroutine on Wasm/WASI from executing after a delay() call in some scenarios (#4239).runBlocking tasks on Kotlin/Native that arrive after the runBlocking block was exited (#4245).Flow operators sometimes resuming without taking cancellation into account (#4254). Thanks, @jxdabc!ThreadLocal values not to get cleaned when using non-CoroutineDispatcher continuation interceptors (#4296).limitedParallelism now optionally accepts the name of the dispatcher view for easier debugging (#4023).Dispatchers.IO on the JVM when other standard dispatchers are accessed (#4166). Thanks, @metalhead8816!Flow<T>.chunked(size: Int): Flow<List<T>> operator that groups emitted values into groups of the given size (#1290).AutoCloseable now (#4123).hasNext on a Channel's iterator is idempotent (#4065). Thanks, @gitpaxultek!CoroutineScope() created without an explicit dispatcher uses Dispatchers.Default on Native (#4074). Thanks, @whyoleg!Dispatchers.Main from initializing when the Firebase dependency is used (#3914).runBlocking (#4134).Mutex to Semaphore (#4176).asDeferred on a Future many times (#4156).BroadcastChannel-based API (#4197).kotlinx-coroutines-test API (#4198).Job.cancelFutureOnCompletion (#4173).CoroutineDispatcher.limitedParallelism to stable (#3864).CoroutineStart.ATOMIC from ExperimentalCoroutinesApi to DelicateCoroutinesApi (#4169).CancellableContinuation.resume with an onCancellation lambda to stable, providing extra arguments to the lambda (#4088).InternalForInheritanceCoroutinesApi opt-in (#3770).ExperimentalForInheritanceCoroutinesApi opt-in (#3770).CoroutineStart and Channel-based API (#4147, #4148, #4167). Thanks, @globsterg!Job (#4053).BroadcastChannel-based API (#4197).kotlinx-coroutines-test API (#4198).CoroutineStart.ATOMIC from ExperimentalCoroutinesApi to DelicateCoroutinesApi (#4169).CoroutineStart and Channel-based API (#4147, #4148, #4167). Thanks, @globsterg!Mutex to Semaphore (#4176).Job.cancelFutureOnCompletion (#4173).asDeferred on a Future many times (#4156).probeCoroutineResumed when starting coroutines with UNDISPATCHED (#4162).Dispatchers.IO on the JVM when other standard dispatchers are accessed (#4166). Thanks, @metalhead8816!Flow<T>.chunked(size: Int): Flow<List<T>> operator that groups emitted values into groups of the given size (#1290).AutoCloseable now (#4123).limitedParallelism now optionally accepts the name of the dispatcher view for easier debugging (#4023).InternalForInheritanceCoroutinesApi opt-in (#3770).ExperimentalForInheritanceCoroutinesApi opt-in (#3770).CoroutineDispatcher.limitedParallelism to stable (#3864).CancellableContinuation.resume with an onCancellation lambda to stable, providing extra arguments to the lambda (#4088).runBlocking (#4134).Job (#4053).Dispatchers.Main from initializing when the Firebase dependency is used (#3914).hasNext on a Channel's iterator is idempotent (#4065). Thanks, @gitpaxultek!CoroutineScope() created without an explicit dispatcher uses Dispatchers.Default on Native (#4074). Thanks, @whyoleg!@ExperimentalTime annotation from usages of TimeSource (#4046). Thanks, @hfhbd!NullPointerException when setting the StateFlow value on old Android devices (#3820).kotlin.random.Random as part of Dispatchers.Default and Dispatchers.IO initialization (#4051).Flow.timeout throws the exception with which the channel was closed (#4071).Flow.timeout throws the exception with which the channel was closed (#4071).@ExperimentalTime annotation from usages of TimeSource (#4046). Thanks, @hfhbd!NullPointerException when setting the StateFlow value on old Android devices (#3820).kotlin.random.Random as part of Dispatchers.Default and Dispatchers.IO initialization (#4051).Dispatchers.Main != Dispatchers.Main.immediate (#3545, #3963).Flow operators that limit cancel the upstream flow to forget that they were already finished if there is another such operator upstream (#4035, #4038)kotlinx-coroutines-debug is published with the correct Java 9 module info (#3944).kotlinx-coroutines-debug no longer requires manually setting DebugProbes.enableCoroutineCreationStackTraces to false, it's the default (#3783).kotlinx-coroutines-test: set the default timeout of runTest to 60 seconds, added the ability to configure it on the JVM with the kotlinx.coroutines.test.default_timeout=10s (#3800).kotlinx-coroutines-test: fixed a bug that could lead to not all uncaught exceptions being reported after some tests failed (#3800).delay(Duration) rounds nanoseconds up to whole milliseconds and not down (#3920). Thanks @kevincianfarini!Dispatchers.Default and the default thread for background work are guaranteed to use the same context classloader as the object containing it them (#3832).SharedFlow.collect suspends for the first time, it's registered as a subscriber for that SharedFlow (#3885). Before, it was also true, but not documented.withLock on JS (#3881). Thanks @CLOVIS-AI!kotlinx-coroutines-debug no longer requires manually setting DebugProbes.enableCoroutineCreationStackTraces to false, it's the default (#3783).Flow operators that limit cancel the upstream flow to forget that they were already finished if there is another such operator upstream (#4035, #4038)Mutex.onLock would not unlock if a non-local return was performed (#3985).Could not find "org.jetbrains.kotlinx:atomicfu-cinterop-interop" (#3968).Dispatchers.Main != Dispatchers.Main.immediate (#3545, #3963).kotlinx-coroutines-debug is published with the correct Java 9 module info (#3944).kotlinx-coroutines-test: set the default timeout of runTest to 60 seconds, added the ability to configure it on the JVM with the kotlinx.coroutines.test.default_timeout=10s (#3800).kotlinx-coroutines-test: fixed a bug that could lead to not all uncaught exceptions being reported after some tests failed (#3800).delay(Duration) rounds nanoseconds up to whole milliseconds and not down (#3920). Thanks @kevincianfarini!Dispatchers.Default and the default thread for background work are guaranteed to use the same context classloader as the object containing it them (#3832).SharedFlow.collect suspends for the first time, it's registered as a subscriber for that SharedFlow (#3885). Before, it was also true, but not documented.withLock on JS (#3881). Thanks @CLOVIS-AI!CopyableThreadContextElement now properly copies an element when crossing the coroutine boundary in flowOn (#3787). Thanks @wanyingd1996!newSingleThreadContext from closing (#3768).Mutex during tryLock/unlock sequence with owners is fixed (#3745).runTest is restored (#3673)onUndeliveredElement now allocate less memory (#3646)Channel implementation with significant performance improvements across the API (#3621).select operator implementation: faster, more lightweight, and more robust (#3020).Mutex and Semaphore now share the same underlying data structure (#3020).Dispatchers.IO is added to K/N (#3205)newFixedThreadPool and Dispatchers.Default implementations on K/N were wholly rewritten to support graceful growth under load (#3595).kotlinx-coroutines-test rework:timeout parameter to runTest for the whole-test timeout, 10 seconds by default (#3270). This replaces the configuration of quiescence timeouts, which is now deprecated (#3603).withTimeout exception messages indicate if the timeout used the virtual time (#3588).TestCoroutineScheduler, runTest, and TestScope API are promoted to stable (#3622).runTest now also fails if there were uncaught exceptions in coroutines not inherited from the test coroutine (#1205).kotlinx-coroutines-core and kotlinx-coroutines-jdk8 artifacts were merged into a single artifact (#3268).\b symbol and are now navigable in IDE and supplied with proper documentation (#2291).CoroutineContext.isActive returns true for contexts without any job in them (#3300).JavaFx version is updated to 17.0.2 in kotlinx-coroutines-javafx (#3671)..BroadcastChannel and all the corresponding API are deprecated (#2680).Dispatchers.Default is backed by the number of threads equal to the number of available cores (#3366).Job.parent API (#3201).TestScheduler leaked cancelled jobs (#3398).TestScope.timeSource now provides comparable time marks (#3617). Thanks @hfhbd!withTimeout handles were preserved in JS runtime (#3440).awaitFrame only awaits a single frame when used from the main looper (#3432). Thanks @pablobaxter!Class-Path attribute was removed from kotlinx-coroutines-debug.jar manifest (#3361).updateThreadContext operated on the parent context (#3411).Flow.filterIsInstance extension (#3240).Dispatchers.Default thread name prefixes are now configurable with system property (#3231).Flow.timeout operator as @FlowPreview (#2624). Thanks @pablobaxter!future builder in case of exceptions (#3475). Thanks @He-Pin!Mono.awaitSingleOrNull now waits for the onComplete signal (#3487).Channel.isClosedForSend and Channel.isClosedForReceive are promoted from experimental to delicate (#3448).EventLoop (#3547).Dispatchers.IO.limitedParallelism(valueLargerThanIOSize) no longer creates an additional wrapper (#3442). Thanks @dovchinnikov!@FlowPreview and @ExperimentalCoroutinesApi are promoted to experimental and stable respectively (#3542, #3097, #3548).Dispatchers.Default and Dispatchers.IO (#3416, #3418).suspendCancellableCoroutineReusable might have hanged (#3613).CoroutineExceptionHandler is no longer invoked in case of unprocessed future failure (#3452).withContext operator (#3592).DebugProbes (#3527).CoroutineDispatcher.asExecutor() runs tasks without dispatching if the dispatcher is unconfined (#3683). Thanks @odedniv!SharedFlow.toMutableList and SharedFlow.toSet lints are introduced (#3706).Channel.invokeOnClose is promoted to stable API (#3358).Dispatchers.Default and Dispatchers.IO during the startup phase (#3652).Dispatchers.Default (#3642).limitedParallelism to perform dispatches even after the underlying dispatcher was closed (#3672).cause was selected (#3714).Changelog for previous versions may be found in CHANGES_UP_TO_1.7.md