StateFlow, SharedFlow and corresponding operators are promoted to stable API (#2316).
Flow.debounce operator with timeout selector based on each individual element is added (#1216, thanks to @mkano9!).
CoroutineContext.job extension property is introduced (#2159).
Flow.combine operator is reworked:
Complete fairness is maintained for single-threaded dispatchers.
Its performance is improved, depending on the use-case, by at least 50% (#2296).
Quadratic complexity depending on the number of upstream flows is eliminated (#2296).
crossinline and inline-heavy internals are removed, fixing sporadic SIGSEGV on Mediatek Android devices (#1683, #1743).
Flow.zip operator performance is improved by 40%.
Various API has been promoted to stable or its deprecation level has been raised (#2316).
Bug fixes
Suspendable stateIn operator propagates exception to the caller when upstream fails to produce initial value (#2329).
Fix SharedFlow with replay for subscribers working at different speed (#2325).
Do not fail debug agent installation when security manager does not provide access to system properties (#2311).
Cancelled lazy coroutines are properly cleaned up from debug agent output (#2294).
BlockHound false-positives are correctly filtered out (#2302, #2190, #2303).
Potential crash during a race between cancellation and upstream in Observable.asFlow is fixed (#2104, #2299, thanks to @LouisCAD and @drinkthestars).
1.4.0-M1
Breaking changes
The concept of atomic cancellation in channels is removed. All operations in channels
and corresponding Flow operators are cancellable in non-atomic way (#1813).
If CoroutineDispatcher throws RejectedExecutionException, cancel current Job and schedule its execution to Dispatchers.IO (#2003).
CancellableContinuation.invokeOnCancellation is invoked if the continuation was cancelled while its resume has been dispatched (#1915).
Flow.singleOrNull operator is aligned with standard library and does not longer throw IllegalStateException on multiple values (#2289).
New experimental features
SharedFlow primitive for managing hot sources of events with support of various subscription mechanisms, replay logs and buffering (#2034).
Flow.shareIn and Flow.stateIn operators to transform cold instances of flow to hot SharedFlow and StateFlow respectively (#2047).
Other
Support leak-free closeable resources transfer via onUndeliveredElement in channels (#1936).
Changed ABI in reactive integrations for Java interoperability (#2182).
Fixed ProGuard rules for kotlinx-coroutines-core (#2046, #2266).
Lint settings were added to Flow to avoid accidental capturing of outer CoroutineScope for cancellation check (#2038).
External contributions
Allow nullable types in Flow.firstOrNull and Flow.singleOrNull by @ansman (#2229).
Add Publisher.awaitSingleOrDefault|Null|Else extensions by @sdeleuze (#1993).
awaitCancellation top-level function by @LouisCAD (#2213).
Significant part of our Gradle build scripts were migrated to .kts by @turansky.
StateFlow, SharedFlow and corresponding operators are promoted to stable API (#2316).
Flow.debounce operator with timeout selector based on each individual element is added (#1216, thanks to @mkano9!).
CoroutineContext.job extension property is introduced (#2159).
Flow.combine operator is reworked:
Complete fairness is maintained for single-threaded dispatchers.
Its performance is improved, depending on the use-case, by at least 50% (#2296).
Quadratic complexity depending on the number of upstream flows is eliminated (#2296).
crossinline and inline-heavy internals are removed, fixing sporadic SIGSEGV on Mediatek Android devices (#1683, #1743).
Flow.zip operator performance is improved by 40%.
Various API has been promoted to stable or its deprecation level has been raised (#2316).
Bug fixes
Suspendable stateIn operator propagates exception to the caller when upstream fails to produce initial value (#2329).
Fix SharedFlow with replay for subscribers working at different speed (#2325).
Do not fail debug agent installation when security manager does not provide access to system properties (#2311).
Cancelled lazy coroutines are properly cleaned up from debug agent output (#2294).
BlockHound false-positives are correctly filtered out (#2302, #2190, #2303).
Potential crash during a race between cancellation and upstream in Observable.asFlow is fixed (#2104, #2299, thanks to @LouisCAD and @drinkthestars).
Version 1.4.0-M1
Breaking changes
The concept of atomic cancellation in channels is removed. All operations in channels
and corresponding Flow operators are cancellable in non-atomic way (#1813).
If CoroutineDispatcher throws RejectedExecutionException, cancel current Job and schedule its execution to Dispatchers.IO (#2003).
CancellableContinuation.invokeOnCancellation is invoked if the continuation was cancelled while its resume has been dispatched (#1915).
Flow.singleOrNull operator is aligned with standard library and does not longer throw IllegalStateException on multiple values (#2289).
New experimental features
SharedFlow primitive for managing hot sources of events with support of various subscription mechanisms, replay logs and buffering (#2034).
Flow.shareIn and Flow.stateIn operators to transform cold instances of flow to hot SharedFlow and StateFlow respectively (#2047).
Other
Support leak-free closeable resources transfer via onUndeliveredElement in channels (#1936).
Changed ABI in reactive integrations for Java interoperability (#2182).
Fixed ProGuard rules for kotlinx-coroutines-core (#2046, #2266).
Lint settings were added to Flow to avoid accidental capturing of outer CoroutineScope for cancellation check (#2038).
External contributions
Allow nullable types in Flow.firstOrNull and Flow.singleOrNull by @ansman (#2229).
Add Publisher.awaitSingleOrDefault|Null|Else extensions by @sdeleuze (#1993).
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps kotlinx-coroutines-core from 1.3.9 to 1.4.0.
Release notes
Sourced from kotlinx-coroutines-core's releases.
... (truncated)
Changelog
Sourced from kotlinx-coroutines-core's changelog.
... (truncated)
Commits
f1e35a0
Version 1.4.0727dd58
Merge remote-tracking branch 'origin/master' into develope16eb9d
Update experimental declarations (#2316)92db4e1
Add debounce with selector and kotlin.time (#2336)53f007f
Fix SharedFlow with replay for subscribers working at different speed (#2325)45ba58e
Fix BlockHound false positives (#2331)ee78090
Fix potential crash in Rx2 and Rx3 asFlow extension (#2333)8df6f5a
Fix race condition in testUpstreamFailedImmediatelyWithInitialValue22c4301
Propagate kotlin_snapshot_version to buildSrc and kts files (#2332)3275d22
Propagate exception from stateIn to the caller when the upstream failed to pr...Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)