Releases: Kotlin/kotlinx.coroutines
Releases · Kotlin/kotlinx.coroutines
0.16
- Coroutines that are scheduled for execution are cancellable by default now
suspendAtomicCancellableCoroutine
function is introduced for funs like
send
/receive
/receiveOrNull
that require atomic cancellation
(they cannot be cancelled after decision was made)- Coroutines started with default mode using
async
/launch
/actor
builders can be cancelled before their execution starts CoroutineStart.ATOMIC
is introduced as a start mode to specify that
coroutine cannot be cancelled before its execution startsrun
function is also cancellable in the same way and accepts an optional
CoroutineStart
parameter to change this default.
BroadcastChannel
factory function is introducedCorouiteExceptionHandler
factory function is introduced by @konrad-kaminskiintegration
directory is introduced for all 3rd party integration projects- It has contribution guidelines and contributions from community are welcome
- Support for Guava
ListenableFuture
in the newkotlinx-coroutines-guava
module - Rx1 Scheduler support by @konrad-kaminski
- #66 Fixed a number of
Channel
andBroadcastChannel
implementation bugs related to concurrent send/close/close of channels that lead to hanging send, offer or close operations.
Thanks to @chrisly42 and @cy6erGn0m for finding them. - #67 Fixed
withTimeoutOrNull
which was returningnull
on timeout of inner or outerwithTimeout
blocks.
Thanks to @gregschlom for finding the problem. - Fixed a bug where
Job
fails to dispose a handler when it is the only handler by @uchuhimo
0.15
Version 0.15
- Switched to Kotlin version 1.1.2 (can still be used with 1.1.0).
CoroutineStart
enum is introduced forlaunch
/async
/actor
builders:- The usage of
luanch(context, start = false)
is deprecated and is replaced with
launch(context, CoroutineStart.LAZY)
CoroutineStart.UNDISPATCHED
is introduced to start coroutine execution immediately in the invoker thread,
so thatasync(context, CoroutineStart.UNDISPATCHED)
is similar to the behavior of C#async
.- Guide to UI programming with coroutines mentions the use of it to optimize
the start of coroutines from UI threads.
- The usage of
- Introduced
BroadcastChannel
interface inkotlinx-coroutines-core
module:- It extends
SendChannel
interface and providesopen
function to create subscriptions. - Subscriptions are represented with
SubscriptionReceiveChannel
interface. - The corresponding
SubscriptionReceiveChannel
interfaces are removed from reactive implementation
modules. They use an interface defined inkotlinx-coroutines-core
module. ConflatedBroadcastChannel
implementation is provided for state-observation-like use-cases, where a coroutine or a
regular code (in UI, for example) updates the state that subscriber coroutines shall react to.ArrayBroadcastChannel
implementation is provided for event-bus-like use-cases, where a sequence of events shall
be received by multiple subscribers without any omissions.- Guide to reactive streams with coroutines includes
"Rx Subject vs BroadcastChannel" section.
- It extends
- Pull requests from Konrad Kamiński are merged into reactive stream implementations:
- Support for Project Reactor
Mono
andFlux
.
Seekotlinx-coroutines-reactor
module. - Implemented Rx1
Completable.awaitCompleted
. - Added support for Rx2
Maybe
.
- Support for Project Reactor
- Better timeout support:
- Introduced
withTimeoutOrNull
function. - Implemented
onTimeout
clause forselect
expressions. - Fixed spurious concurrency inside
withTimeout
blocks on their cancellation. - Changed the behavior of
withTimeout
whenCancellationException
is suppressed inside the block. The
invocation ofwithTimeout
now always returns the result of the execution of its inner block.
- Introduced
- The
channel
property inActorScope
is promoted to a widerChannel
type, so that an actor
can have an easy access to its own inbox send channel. - Renamed
Mutex.withMutex
toMutex.withLock
, old name is deprecated.
0.14
- Switched to Kotlin version 1.1.1 (can still be used with 1.1.0)
- Introduced
consumeEach
helper function for channels and reactive streams, Rx 1.x, and Rx 2.x- It ensures that streams are unsubscribed from on any exception
- Iteration with
for
loop on reactive streams is deprecated - Guide to reactive streams with coroutines is updated virtually
all over the place to reflect these important changes
- Implemented
awaitFirstOrDefault
extension for reactive streams, Rx 1.x, and Rx 2.x - Added
Mutex.withMutex
helper function kotlinx-coroutines-android
module hasprovided
dependency on of Android APIs to
eliminate warnings when using it in android project
0.13
- New
kotlinx-coroutinex-android
module with AndroidUI
context implementation - Introduced
whileSelect
convenience function - Implemented
ConflatedChannel
- Renamed various
toXXX
conversion functions toasXXX
(old names are deprecated) run
is optimized with fast-path case and no longer hasCoroutineScope
in its block- Fixed dispatching logic of
withTimeout
(removed extra dispatch) EventLoop
that is used byrunBlocking
now implements Delay, giving more predictable test behavior- Various refactorings related to resource management and timeouts:
Job.Registration
is renamed toDisposableHandle
EmptyRegistration
is renamed toNonDisposableHandle
Job.unregisterOnCompletion
is renamed toJob.disposeOnCompletion
Delay.invokeOnTimeout
is introducedwithTimeout
now usesDelay.invokeOnTimeout
when available
- A number of improvement for reactive streams and Rx:
- Introduced
rxFlowable
builder for Rx 2.x Scheduler.asCoroutineDispatcher
extension for Rx 2.x- Fixed bug with sometimes missing
onComplete
inpublish
,rxObservable
, andrxFlowable
builders - Channels that are open for reactive streams are now
Closeable
- Fixed
CompletableSource.await
and added test for it - Removed
rx.Completable.await
due to name conflict
- Introduced
- New documentation:
- Code is published to JCenter repository
0.12: Kotlin 1.1.0 release and reactive utilities
- Switched to Kotlin version 1.1.0 release.
- Reworked and updated utilities for
Reactive Streams,
Rx 1.x, and
Rx 2.x with library-specific
coroutine builders, suspending functions, converters and iteration support. LinkedListChannel
with unlimited buffer (offer
always succeeds).onLock
select clause and an optionalowner
parameter in allMutex
functions.selectUnbiased
function.actor
coroutine builder.- Couple more examples for "Shared mutable state and concurrency" section and
"Channels are fair" section with ping-pong table example
in coroutines guide.
0.11-rc: select
select
expression with onJoin/onAwait/onSend/onReceive clauses.Mutex
is moved tokotlinx.coroutines.experimental.sync
package.ClosedSendChannelException
is a subclass ofCancellationException
now.- New sections on "Shared mutable state and concurrency" and "Select expression"
in coroutines guide.
0.10-rc: Mutex & Kotlin RC
- Switched to Kotlin version 1.1.0-rc-91.
Mutex
synchronization primitive is introduced.buildChannel
is renamed toproduce
, old name is deprecated.Job.onCompletion
is renamed toJob.invokeOnCompletion
, old name is deprecated.delay
implementation in Swing, JavaFx, and scheduled executors is fixed to avoid an extra dispatch.CancellableContinuation.resumeUndispatched
is introduced to make this efficient implementation possible.- Remove unnecessary creation of
CancellationException
to improve performance, plus other performance improvements. - Suppress deprecated and internal APIs from docs.
- Better docs at top level with categorized summary of classes and functions.
0.8-beta: async and other maintanance
defer
coroutine builder is renamed toasync
.lazyDefer
is deprecated,async
has an optionalstart
parameter instead.LazyDeferred
interface is deprecated, lazy start functionality is integrated intoJob
interface.launch
has an optionalstart
parameter for lazily started coroutines.Job.start
andJob.isCompleted
are introduced.Deferred.isCompletedExceptionally
andDeferred.isCancelled
are introduced.Job.getInactiveCancellationException
is renamed togetCompletionException
.Job.join
is now a member function.- Internal
JobSupport
state machine is enhanced to support new (not-started-yet) state.
So, lazy coroutines do not need a separate state variable to track their started/not-started (new/active) status. - Exception transparency in
Job.cancel
(original cause is rethrown). - Clarified possible states for
Job
/CancellableContinuation
/Deferred
in docs. - Example on async-style functions and links to API reference site from coroutines guide.
0.7-beta: Channels
- Buffered and unbuffered channels are introduced:
Channel
,SendChannel
, andReceiveChannel
interfaces,
RendezvousChannel
andArrayChannel
implementations,Channel()
factory function andbuildChannel{}
coroutines builder. Here
context is renamed toUnconfined
(the old name is deprecated).- A guide on coroutines is expanded: sections on contexts and channels.
0.6-beta: for Kotlin 1.1.0-beta-38
- Switched to Kotlin version 1.1.0-beta-38.
- A guide on coroutines is expanded.