Releases: Kotlin/kotlinx.coroutines
1.3.3
Flow
Flow.take
performance is significantly improved (#1538).Flow.merge
operator (#1491).- Reactive Flow adapters are promoted to stable API (#1549).
- Reusable cancellable continuations were introduced that improved the performance of various flow operators and iteration over channels (#1534).
- Fixed interaction of multiple flows with
take
operator (#1610). - Throw
NoSuchElementException
instead ofUnsupportedOperationException
for emptyFlow
inreduce
operator (#1659). onCompletion
now rethrows downstream exceptions on emit attempt (#1654).- Allow non-emitting
withContext
fromflow
builder (#1616).
Debugging
DebugProbes.dumpCoroutines
is optimized to be able to print the 6-digit number of coroutines (#1535).- Properly capture unstarted lazy coroutines in debugger (#1544).
- Capture coroutines launched from within a test constructor with
CoroutinesTimeout
test rule (#1542). - Stacktraces of
Job
-related coroutine machinery are shortened and prettified (#1574). - Stacktrace recovery unification that should provide a consistent experience recover of stacktrace (#1597).
- Stacktrace recovery for
withTimeout
is supported (#1625). - Do not recover exception with a single
String
parameter constructor that is not amessage
(#1631).
Other features
Dispatchers.Default
andDispatchers.IO
rework: CPU consumption is significantly lower, predictable idle threads termination (#840, #1046, #1286).- Avoid
ServiceLoader
for loadingDispatchers.Main
(#1572, #1557, #878, #1606). - Consistently handle undeliverable exceptions in RxJava and Reactor integrations (#252, #1614).
yield
support in immediate dispatchers (#1474).CompletableDeferred.completeWith(result: Result<T>)
is introduced.- Added support for tvOS and watchOS-based Native targets (#1596).
Bug fixes and improvements
- Kotlin version is updated to 1.3.61.
CoroutineDispatcher.isDispatchNeeded
is promoted to stable API (#1014).- Livelock and stackoverflows in mutual
select
expressions are fixed (#1411, #504). - Properly handle
null
values inListenableFuture
integration (#1510). - Making
ReceiveChannel.cancel
linearizability-friendly. - Linearizability of
Channel.close
in a complex contended cases (#1419). ArrayChannel.isBufferEmpty
atomicity is fixed (#1526).- Various documentation improvements.
- Reduced bytecode size of
kotlinx-coroutines-core
, reduced size of minifieddex
when using basic functionality ofkotlinx-coroutines
.
1.3.2
This is a maintenance release that does not include any new features or bug fixes.
- Reactive integrations for
Flow
are promoted to stable API. - Obsolete reactive API is deprecated.
- Deprecation level for API deprecated in 1.3.0 is increased.
- Various documentation improvements.
1.3.1
This is a minor update with various fixes:
- Flow: Fix recursion in combineTransform<T1, T2, R> (#1466).
- Fixed race in the Semaphore (#1477).
- Repaired some of ListenableFuture.kt's cancellation corner cases (#1441).
- Consistently unwrap exception in slow path of CompletionStage.asDeferred (#1479).
- Various fixes in documentation (#1496, #1476, #1470, #1468).
- Various cleanups and additions in tests.
Note: Kotlin/Native artifacts are now published with Gradle metadata format version 1.0, so you will need Gradle version 5.3 or later to use this version of kotlinx.coroutines in your Kotlin/Native project.
1.3.0
Flow
This version is the first stable release of Flow
API.
All Flow
API not marked with @FlowPreview
or @ExperimentalCoroutinesApi
annotations are stable and here to stay.
Flow declarations marked with @ExperimentalCoroutinesApi
have the same guarantees as regular experimental API.
Please note that API marked with @FlowPreview
have weak guarantees on source, binary and semantic compatibility.
Changelog
- A new guide section about Flow.
CoroutineDispatcher.asExecutor
extension (#1450).- Fixed bug when
select
statement could report the same exception twice (#1433). - Fixed context preservation in
flatMapMerge
in a case when collected values were immediately emitted to another flow (#1440). - Reactive Flow integrations enclosing files are renamed for better interoperability with Java.
- Default buffer size in all Flow operators is increased to 64.
- Kotlin updated to 1.3.50.
1.3.0-RC2
Flow improvements
-
Operators for UI programming are reworked for the sake of consistency, naming scheme for operator overloads is introduced:
combineLatest
is deprecated in the favor ofcombine
.combineTransform
operator for non-trivial transformations (#1224).- Top-level
combine
andcombineTransform
overloads for multiple flows (#1262). switchMap
is deprecated.flatMapLatest
,mapLatest
andtransformLatest
are introduced instead (#1335).collectLatest
terminal operator (#1269).
-
Improved cancellation support in
flattenMerge
(#1392). -
channelFlow
cancellation does not leak to the parent (#1334). -
Fixed flow invariant enforcement for
suspend fun main
(#1421). -
delayEach
anddelayFlow
are deprecated (#1429).
General changes
-
Integration with Reactor context
- Propagation of the coroutine context of
await
calls into Mono/Flux builder. - Publisher.asFlow propagates coroutine context from
collect
call to the Publisher. - New
Flow.asFlux
builder.
- Propagation of the coroutine context of
-
ServiceLoader-code is adjusted to avoid I/O on the Main thread on newer (3.6.0+) Android toolchain.
-
Stacktrace recovery support for minified builds on Android (#1416).
-
Guava version in
kotlinx-coroutines-guava
updated to28.0
. -
setTimeout
-based JS dispatcher for platforms whereprocess
is unavailable (#1404). -
Native, JS and common modules are added to
kotlinx-coroutines-bom
. -
Fixed bug with ignored
acquiredPermits
inSemaphore
(#1423).
1.3.0-RC
Flow
- Core
Flow
API is promoted to stable - New basic
Flow
operators:withIndex
,collectIndexed
,distinctUntilChanged
overload - New core
Flow
operators:onStart
andonCompletion
ReceiveChannel.consumeAsFlow
andemitAll
(#1340)
General changes
- Kotlin updated to 1.3.41
- Added
kotlinx-coroutines-bom
with Maven Bill of Materials (#1110) - Reactive integrations are seriously improved
- Stacktrace recovery for
suspend fun main
(#1328) CoroutineScope.cancel
extension with message (#1338)- Protection against non-monotonic clocks in
delay
(#1312) Duration.ZERO
is handled properly in JDK 8 extensions (#1349)- Library code is adjusted to be more minification-friendly
Version 1.3.0-M2
- Kotlin updated to 1.3.40.
Flow
exception transparency concept.- New declarative
Flow
operators:onCompletion
,catch
,retryWhen
,launchIn
.onError*
operators are deprecated in favour ofcatch
. (#1263) Publisher.asFlow
is integrated withbuffer
operator.Publisher.openSubscription
default request size is1
instead of0
(#1267).
Version 1.2.2
- Kotlin updated to 1.3.40.
1.3.0-M1
Flow:
- Core
Flow
interfaces and operators are graduated from preview status to experimental. - Context preservation invariant rework (#1210).
channelFlow
andcallbackFlow
replacements forflowViaChannel
for concurrent flows or callback-based APIs.flow
prohibits emissions from non-scoped coroutines by default and recommends to usechannelFlow
instead to avoid most of the concurrency-related bugs.
- Flow cannot be implemented directly
AbstractFlow
is introduced for extension (e.g. for managing state) and ensures all context preservation invariants.
- Buffer size is decoupled from all operators that imply channel usage (#1233)
buffer
operator can be used to adjust buffer size of any buffer-dependent operator (e.g.channelFlow
,flowOn
andflatMapMerge
).conflate
operator is introduced.
- Flow performance is significantly improved.
- New operators:
scan
,scanReduce
,first
,emitAll
. flowWith
andflowViaChannel
are deprecated.retry
ignores cancellation exceptions from upstream when the flow was externally cancelled (#1122).combineLatest
overloads for multiple flows (#1193).- Fixed numerical overflow in
drop
operator.
Channels:
consumeEach
is promoted to experimental API (#1080).- Conflated channels always deliver the latest value after closing (#332, #1235).
- Non-suspending
ChannelIterator.next
to improve iteration performance (#1162). - Channel exception types are consistent with
produce
and are no longer swallowed as cancellation exceptions in case of programmatic errors (#957, #1128). - All operators on channels (that were prone to coroutine leaks) are deprecated in the favor of
Flow
.
General changes:
- Kotlin updated to 1.3.31
Semaphore
implementation (#1088)- Loading of
Dispatchers.Main
is tweaked so the latest version of R8 can completely remove I/O when loading it (#1231). - Performace of all JS dispatchers is significantly improved (#820).
withContext
checks cancellation status on exit to make reasoning about sequential concurrent code easier (#1177).- Consistent exception handling mechanism for complex hierarchies (#689).
- Convenient overload for
CoroutinesTimeout.seconds
(#1184). - Fix cancellation bug in onJoin (#1130).
- Prevent internal names clash that caused errors for ProGuard (#1159).
- POSIX's
nanosleep
asdelay
inrunBlocking
in K/N (#1225).
1.2.1
Major:
- Infrastructure for testing coroutine-specific code in
kotlinx-coroutines-test
:runBlockingTest
,TestCoroutineScope
andTestCoroutineDispatcher
, contributed by Sean McQuillan (@objcode). Job.asCompletableFuture
extension in jdk8 module (#1113).
Flow improvements:
flowViaChannel
rework: block parameter is no longer suspending, but providesCoroutineScope
receiver and allows conflated channel (#1081, #1112).- New operators:
switchMap
,sample
,debounce
(#1107). consumerEach
is deprecated for removal onPublisher
,ObservableSource
andMaybeSource
,collect
extension is introduced instead (#1080).
Other: