@ExperimentalCoroutinesApi fun <T> CoroutineScope.publish(
context: CoroutineContext = EmptyCoroutineContext,
block: suspend ProducerScope<T>.() -> Unit
Creates cold reactive Publisher that runs a given block in a coroutine.
Every time the returned publisher is subscribed, it starts a new coroutine.
Coroutine emits items with
send. Unsubscribing cancels running coroutine.
send are suspended appropriately when subscribers apply back-pressure and to ensure that
onNext is not invoked concurrently.
|Coroutine action||Signal to subscriber|
|Normal completion or
|Failure with exception or
Coroutine context is inherited from a CoroutineScope, additional context elements can be specified with context argument. If the context does not have any dispatcher nor any other ContinuationInterceptor, then Dispatchers.Default is used. The parent job is inherited from a CoroutineScope as well, but it can also be overridden with corresponding coroutineContext element.
Note: This is an experimental api. Behaviour of publishers that work as children in a parent scope with respect to cancellation and error handling may change in the future.
context - context of the coroutine.
block - the coroutine code.