Channel is a thread-safe data structure which exposes three basic operations:
- send-ing a value to the channel. Values can't be
null
. - receive-ing a value from the channel
- closing the channel using done or error
There are three channel flavors:
- rendezvous channels, where senders and receivers must meet to exchange values
- buffered channels, where a given number of sent values might be buffered, before subsequent
send
s block - unlimited channels, where an unlimited number of values might be buffered, hence
send
never blocks
Channels can be created using the channel's companion object. A rendezvous channel is created using Channel.rendezvous. A buffered channel can be created either with a given capacity - by providing a positive integer to the Channel.buffered method - or with the default capacity (BufferCapacity.default) using Channel.bufferedDefault . A rendezvous channel behaves like a buffered channel with buffer size 0. An unlimited channel can be created using Channel.unlimited.
In a rendezvous channel, senders and receivers block, until a matching party arrives (unless one is already waiting). Similarly, buffered channels block if the buffer is full (in case of senders), or in case of receivers, if the buffer is empty and there are no waiting senders.
All blocking operations behave properly upon interruption.
Channels might be closed, either because no more values will be produced by the source (using done), or because there was an error while producing or processing the received values (using error).
After closing, no more values can be sent to the channel. If the channel is "done", any pending sends will be completed normally. If the channel is in an "error" state, pending sends will be interrupted and will return with the reason for the closure.
In case the channel is closed, a ChannelClosedException is thrown. Alternatively, you can use the orClosed
method variants (e.g. sendOrClosed, receiveOrClosed), which don't throw exceptions, but return a union type which includes one of ChannelClosed values. Such a union type can be further converted to an exception, Either or Try using one of the extension methods in ChannelClosedUnion.
Type parameters
- T
-
The type of the values processed by the channel.
Attributes
- Companion
- object
- Graph
-
- Supertypes
-
trait Sink[T]trait Source[T]trait SourceDrainOps[T]trait SourceOps[T]class Objecttrait Matchableclass AnyShow all
Members list
Type members
Inherited classlikes
The clause passed to select, created using receiveClause or receiveOrDoneClause.
The clause passed to select, created using receiveClause or receiveOrDoneClause.
Attributes
- Inherited from:
- Source
- Supertypes
-
trait Serializabletrait Producttrait Equalstrait SelectClause[T]class Objecttrait Matchableclass AnyShow all
Holds the result of a receiveClause that was selected during a call to select.
Holds the result of a receiveClause that was selected during a call to select.
Attributes
- Inherited from:
- Source
- Supertypes
-
trait Serializabletrait Producttrait Equalstrait SelectResult[T]class Objecttrait Matchableclass AnyShow all
The clause passed to select, created using sendClause.
The clause passed to select, created using sendClause.
Attributes
- Inherited from:
- Sink
- Supertypes
-
trait Serializabletrait Producttrait Equalstrait SelectClause[Unit]class Objecttrait Matchableclass AnyShow all
Holds the result of a sendClause that was selected during a call to select.
Holds the result of a sendClause that was selected during a call to select.
Attributes
- Inherited from:
- Sink
- Supertypes
-
trait Serializabletrait Producttrait Equalstrait SelectResult[Unit]class Objecttrait Matchableclass AnyShow all
Value members
Concrete methods
Returns a string representation of the object.
Returns a string representation of the object.
The default representation is platform dependent.
Attributes
- Returns
-
a string representation of the object.
- Definition Classes
-
Any
Inherited methods
Applies the given mapping function f
to each value received from this source, for which the function is defined, and sends the results to the returned channel. If f
is not defined at a value, the value will be skipped.
Applies the given mapping function f
to each value received from this source, for which the function is defined, and sends the results to the returned channel. If f
is not defined at a value, the value will be skipped.
Errors from this channel are propagated to the returned channel. Any exceptions that occur when invoking f
are propagated as errors to the returned channel as well.
Must be run within a scope, as a child fork is created, which receives from this source and sends the mapped values to the resulting one.
Value parameters
- f
-
The mapping function.
Attributes
- Returns
-
A source, onto which results of the mapping function will be sent.
- Inherited from:
- SourceOps
Close the channel, indicating that no more values will be sent.
Close the channel, indicating that no more values will be sent.
Any values that are already buffered will be delivered. Any send operations that are in progress will complete normally, when a receiver arrives. Any pending receive operations will complete with a channel closed result.
Subsequent send operations will throw ChannelClosedException.
For a variant which doesn't throw exceptions when the channel is closed, use doneOrClosed.
Attributes
- Throws
-
ChannelClosedException
If the channel is already closed.
- Inherited from:
- Sink
Close the channel, indicating that no more values will be sent.
Close the channel, indicating that no more values will be sent.
Any values that are already buffered will be delivered. Any send operations that are in progress will complete normally, when a receiver arrives. Any pending receive operations will complete with a channel closed result.
Subsequent sendOrClosed operations will return ChannelClosed.
For a variant which throws exceptions when the channel is closed, use done.
Attributes
- Returns
-
Either
()
, or ChannelClosed, when the channel is already closed. - Inherited from:
- Sink
Receives all values from the channel. Blocks until the channel is done.
Receives all values from the channel. Blocks until the channel is done.
Attributes
- Throws
-
ChannelClosedException.Error
when there is an upstream error.
- Inherited from:
- SourceDrainOps
The "safe" variant of drain.
Close the channel, indicating an error.
Close the channel, indicating an error.
Any values that are already buffered won't be delivered. Any send or receive operations that are in progress will complete with a channel closed result.
Subsequent send and Source.receive operations will throw ChannelClosedException.
For a variant which doesn't throw exceptions when the channel is closed, use errorOrClosed.
Value parameters
- reason
-
The reason of the error.
Attributes
- Throws
-
ChannelClosedException
If the channel is already closed.
- Inherited from:
- Sink
Close the channel, indicating an error.
Close the channel, indicating an error.
Any values that are already buffered won't be delivered. Any send or receive operations that are in progress will complete with a channel closed result.
Subsequent sendOrClosed and Source.receiveOrClosed operations will return ChannelClosed.
For a variant which throws exceptions when the channel is closed, use error.
Value parameters
- reason
-
The reason of the error.
Attributes
- Returns
-
Either
()
, or ChannelClosed, when the channel is already closed. - Inherited from:
- Sink
Attributes
- Inherited from:
- SourceOps
Invokes the given function for each received value. Blocks until the channel is done.
Invokes the given function for each received value. Blocks until the channel is done.
Attributes
- Throws
-
ChannelClosedException.Error
When there is an upstream error.
- Inherited from:
- SourceDrainOps
The "safe" variant of foreach.
Attributes
- Returns
-
true
if no more values can be received from this channel; Source.receive will throw ChannelClosedException. When closed for receive, sending values is also not possible, isClosedForSend will returntrue
. - Inherited from:
- Source
Attributes
- Returns
-
Some
if no more values can be received from this channel; Source.receive will throw ChannelClosedException. When closed for receive, sending values is also not possible, isClosedForSend will returntrue
. - Inherited from:
- Source
Attributes
- Returns
-
true
if no more values can be sent to this channel; Sink.sendOrClosed will return ChannelClosed. When closed for send, receiving using Source.receive might still be possible, if the channel is done, and not in an error. This can be verified using isClosedForReceive. - Inherited from:
- Sink
Attributes
- Returns
-
Some
if no more values can be sent to this channel; Sink.sendOrClosed will return ChannelClosed. When closed for send, receiving using Source.receive might still be possible, if the channel is done, and not in an error. This can be verified using isClosedForReceive. - Inherited from:
- Sink
Applies the given mapping function f
to each value received from this source, and sends the results to the returned channel.
Applies the given mapping function f
to each value received from this source, and sends the results to the returned channel.
Errors from this channel are propagated to the returned channel. Any exceptions that occur when invoking f
are propagated as errors to the returned channel as well.
Must be run within a scope, as a child fork is created, which receives from this source and sends the mapped values to the resulting one.
Value parameters
- f
-
The mapping function.
Attributes
- Returns
-
A source, onto which results of the mapping function will be sent.
- Inherited from:
- SourceOps
Passes each received values from this channel to the given sink. Blocks until the channel is done.
Passes each received values from this channel to the given sink. Blocks until the channel is done.
Errors are always propagated. Successful channel completion is propagated when propagateDone
is set to true
.
Attributes
- Inherited from:
- SourceDrainOps
Receive a value from the channel. For a variant which doesn't throw exceptions when the channel is closed, use receiveOrClosed.
Receive a value from the channel. For a variant which doesn't throw exceptions when the channel is closed, use receiveOrClosed.
Attributes
- Returns
-
Either a value of type
T
, or ChannelClosed, when the channel is closed. - Throws
-
ChannelClosedException
If the channel is closed (done or in error).
- Inherited from:
- Source
Receive a value from the channel. For a variant which throws exceptions when the channel is closed, use receive.
Receive a value from the channel. For a variant which throws exceptions when the channel is closed, use receive.
Attributes
- Returns
-
Either a value of type
T
, or ChannelClosed, when the channel is closed. - Inherited from:
- Source
Receive a value from the channel.
Receive a value from the channel.
Attributes
- Returns
-
Either a value of type
T
, or ChannelClosed.Done, when the channel is done. - Throws
-
ChannelClosedException
If the channel is in error.
- See also
-
receive and receiveOrClosed.
- Inherited from:
- Source
Send a value to the channel. For a variant which doesn't throw exceptions when the channel is closed, use sendOrClosed.
Send a value to the channel. For a variant which doesn't throw exceptions when the channel is closed, use sendOrClosed.
Value parameters
- t
-
The value to send. Not
null
.
Attributes
- Throws
-
ChannelClosedException
If the channel is closed (done or in error).
- Inherited from:
- Sink
Create a clause which can be used in select. The clause will send the given value to the current channel, and return ()
as the clause's result.
Send a value to the channel. For a variant which throws exceptions when the channel is closed, use send.
Send a value to the channel. For a variant which throws exceptions when the channel is closed, use send.
Value parameters
- t
-
The value to send. Not
null
.
Attributes
- Returns
-
Either
()
, or ChannelClosed, when the channel is closed. - Inherited from:
- Sink
Applies the given consumer function f
to each value received from this source.
Applies the given consumer function f
to each value received from this source.
Errors from this channel are propagated to the returned channel. Any exceptions that occur when invoking f
are propagated as errors to the returned channel as well.
Must be run within a scope, as a child fork is created, which receives from this source and sends the mapped values to the resulting one.
Useful for side-effects without result values, like logging and debugging.
Value parameters
- f
-
The consumer function.
Attributes
- Returns
-
A source, which the values from the input source are passed to.
- Inherited from:
- SourceOps
Accumulates all values received from the channel into a list. Blocks until the channel is done.
Accumulates all values received from the channel into a list. Blocks until the channel is done.
Attributes
- Throws
-
ChannelClosedException.Error
When there is an upstream error.
- Inherited from:
- SourceDrainOps
The "safe" variant of toList.
Attributes
- Inherited from:
- SourceOps