Change log for kotlinx.coroutines

Version 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 has provided dependency on of Android APIs to eliminate warnings when using it in android project

Version 0.13

  • New kotlinx-coroutinex-android module with Android UI context implementation
  • Introduced whileSelect convenience function
  • Implemented ConflatedChannel
  • Renamed various toXXX conversion functions to asXXX (old names are deprecated)
  • run is optimized with fast-path case and no longer has CoroutineScope in its block
  • Fixed dispatching logic of withTimeout (removed extra dispatch)
  • EventLoop that is used by runBlocking now implements Delay, giving more predictable test behavior
  • Various refactorings related to resource management and timeouts:
    • Job.Registration is renamed to DisposableHandle
    • EmptyRegistration is renamed to NonDisposableHandle
    • Job.unregisterOnCompletion is renamed to Job.disposeOnCompletion
    • Delay.invokeOnTimeout is introduced
    • withTimeout now uses Delay.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 in publish, rxObservable, and rxFlowable 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
  • New documentation:
  • Code is published to JCenter repository

Version 0.12

  • 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 optional owner parameter in all Mutex 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.

Version 0.11-rc

  • select expression with onJoin/onAwait/onSend/onReceive clauses.
  • Mutex is moved to kotlinx.coroutines.experimental.sync package.
  • ClosedSendChannelException is a subclass of CancellationException now.
  • New sections on "Shared mutable state and concurrency" and "Select expression" in coroutines guide.

Version 0.10-rc

  • Switched to Kotlin version 1.1.0-rc-91.
  • Mutex synchronization primitive is introduced.
  • buildChannel is renamed to produce, old name is deprecated.
  • Job.onCompletion is renamed to Job.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.

Version 0.8-beta

  • defer coroutine builder is renamed to async.
  • lazyDefer is deprecated, async has an optional start parameter instead.
  • LazyDeferred interface is deprecated, lazy start functionality is integrated into Job interface.
  • launch has an optional start parameter for lazily started coroutines.
  • Job.start and Job.isCompleted are introduced.
  • Deferred.isCompletedExceptionally and Deferred.isCancelled are introduced.
  • Job.getInactiveCancellationException is renamed to getCompletionException.
  • 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.

Version 0.7-beta

  • Buffered and unbuffered channels are introduced: Channel, SendChannel, and ReceiveChannel interfaces, RendezvousChannel and ArrayChannel implementations, Channel() factory function and buildChannel{} coroutines builder.
  • Here context is renamed to Unconfined (the old name is deprecated).
  • A guide on coroutines is expanded: sections on contexts and channels.

Version 0.6-beta

Version 0.5-beta

  • Switched to Kotlin version 1.1.0-beta-22 (republished version).
  • Removed currentCoroutineContext and related thread-locals without replacement. Explicitly pass coroutine context around if needed.
  • lazyDefer(context) {...} coroutine builder and LazyDeferred interface are introduced.
  • The default behaviour of all coroutine dispatchers is changed to always schedule execution of new coroutine for later in this thread or thread pool. Correspondingly, CoroutineDispatcher.isDispatchNeeded function has a default implementation that returns true.
  • NonCancellable context is introduced.
  • Performance optimizations for cancellable continuations (fewer objects created).
  • A guide on coroutines is added.

Version 0.4-beta

  • Switched to Kotlin version 1.1.0-beta-18 (republished version).
  • CoroutineDispatcher methods now have context parameter.
  • Introduced CancellableContinuation.isCancelled
  • Introduced EventLoop dispatcher and made it a default for runBlocking { ... }
  • Introduced CoroutineScope interface with isActive and context properties; standard coroutine builders include it as receiver for convenience.
  • Introduced Executor.toCoroutineDispatcher() extension.
  • Delay scheduler thread is not daemon anymore, but times out automatically.
  • Debugging facilities in newCoroutineContext can be explicitly disabled with -Dkotlinx.coroutines.debug=off.
  • xxx-test files are renamed to xxx-example for clarity.
  • Fixed NPE in Job implementation when starting coroutine with already cancelled parent job.
  • Support cancellation in kotlinx-coroutines-nio module