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.
DEPRECATED Use Channel.non_blocking_select
Closes the channel.
Appends a String representation of this object which includes its class name, its object address and the values of all instance variables.
Receives a value from the channel.
Receives a value from the channel.
Sends a value to the channel.
Reference
Reference
Object
Object
DEPRECATED Use Channel.non_blocking_select
Closes the channel. The method prevents any new value from being sent to / received from the channel. All fibers blocked in #send
or #receive
will be awakened with Channel::ClosedError
Both awaiting and subsequent calls to #send
will consider the channel closed. All items successfully sent to the channel can be received, before #receive
considers the channel closed. Calling #close
on a closed channel does not have any effect.
Appends a String representation of this object which includes its class name, its object address and the values of all instance variables.
class Person def initialize(@name : String, @age : Int32) end end Person.new("John", 32).inspect # => #<Person:0x10fd31f20 @name="John", @age=32>
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.
© 2012–2020 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/0.35.1/Channel.html