Channel(T)
Inherits Iterator / Enumerable / Reference / Object
A Channel enables concurrent communication between fibers.
They allow communicating data between fibers without sharing memory and without having to worry about locks, semaphores or other special structures.
channel = Channel(Int32).new
spawn do
channel.send(0)
channel.send(1)
end
channel.receive # => 0
channel.receive # => 1
NOTE: Although a Channel(Nil) or any other nilable types like Channel(Int32?) are valid
they are discouraged since from certain methods or constructs it receiving a nil as data
will be indistinguishable from a closed channel.
Instance methods
Receives a value from the channel. If there is a value waiting, then it is returned immediately. Otherwise, this method blocks until a value is sent to the channel.
Raises ClosedError if the channel is closed or closes while waiting for receive.
channel = Channel(Int32).new
spawn do
channel.send(1)
end
channel.receive # => 1
Receives a value from the channel. If there is a value waiting, it is returned immediately. Otherwise, this method blocks until a value is sent to the channel.
Returns nil if the channel is closed or closes while waiting for receive.
Sends a value to the channel.
If the channel has spare capacity, then the method returns immediately.
Otherwise, this method blocks the calling fiber until another fiber calls #receive on the channel.
Raises ClosedError if the channel is closed or closes while waiting on a full channel.