broadcast

fun <E> ReceiveChannel<E>.broadcast(
    capacity: Int = 1,
    start: CoroutineStart = CoroutineStart.LAZY
): BroadcastChannel<E>
(source)

Broadcasts all elements of the channel.

The kind of the resulting channel depends on the specified capacity parameter: when capacity is positive (1 by default), but less than UNLIMITED – uses ArrayBroadcastChannel with a buffer of given capacity, when capacity is CONFLATED – uses ConflatedBroadcastChannel that conflates back-to-back sends; Note that resulting channel behaves like ConflatedBroadcastChannel but is not an instance of ConflatedBroadcastChannel. otherwise – throws IllegalArgumentException.

Parameters

start - coroutine start option. The default value is CoroutineStart.LAZY.

fun <E> CoroutineScope.broadcast(
    context: CoroutineContext = EmptyCoroutineContext,
    capacity: Int = 1,
    start: CoroutineStart = CoroutineStart.LAZY,
    onCompletion: CompletionHandler? = null,
    block: suspend ProducerScope<E>.() -> Unit
): BroadcastChannel<E>
(source)

Launches new coroutine to produce a stream of values by sending them to a broadcast channel and returns a reference to the coroutine as a BroadcastChannel. The resulting object can be used to subscribe to elements produced by this coroutine.

The scope of the coroutine contains ProducerScope interface, which implements both CoroutineScope and SendChannel, so that coroutine can invoke send directly. The channel is closed when the coroutine completes.

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.

Uncaught exceptions in this coroutine close the channel with this exception as a cause and the resulting channel becomes failed, so that any attempt to receive from such a channel throws exception.

The kind of the resulting channel depends on the specified capacity parameter:

Note: By default, the coroutine does not start until the first subscriber appears via BroadcastChannel.openSubscription as start parameter has a value of CoroutineStart.LAZY by default. This ensures that the first subscriber does not miss any sent elements. However, later subscribers may miss elements.

See newCoroutineContext for a description of debugging facilities that are available for newly created coroutine.

Parameters

context - additional to CoroutineScope.coroutineContext context of the coroutine.

capacity - capacity of the channel’s buffer (1 by default).

start - coroutine start option. The default value is CoroutineStart.LAZY.

onCompletion - optional completion handler for the producer coroutine (see Job.invokeOnCompletion).

block - the coroutine code.