public interface AsyncChannel<T>
extends Iterable
An asynchronous channel for inter-task communication with optional buffering.
A channel coordinates producers and consumers without exposing explicit locks or shared mutable state, following the CSP (Communicating Sequential Processes) paradigm popularized by Go's channels.
Channels support both unbuffered (rendezvous) and buffered modes:
create() or create(0). Each
send suspends until a matching receive arrives.create(n). Values are enqueued until the
buffer fills, then senders suspend.
Channels implement Iterable, so they work with for await
and regular for loops — iteration yields received values until the
channel is closed and drained:
def ch = AsyncChannel.create(2)
async { ch.send('a'); ch.send('b'); ch.close()
for await (item in ch) {
println item // prints 'a', then 'b'
}
}
T - the payload type| Type Params | Return Type | Name and description |
|---|---|---|
|
public boolean |
close()Closes this channel. |
<T> |
public static AsyncChannel<T> |
create()Creates an unbuffered (rendezvous) channel. |
<T> |
public static AsyncChannel<T> |
create(int capacity)Creates a channel with the specified buffer capacity. |
|
public int |
getBufferedSize()Returns the number of values currently buffered. |
|
public int |
getCapacity()Returns this channel's buffer capacity. |
|
public boolean |
isClosed()Returns true if this channel has been closed. |
|
public Awaitable<T> |
receive()Receives the next value from this channel. |
|
public Awaitable<Void> |
send(T value)Sends a value through this channel. |
| Methods inherited from class | Name |
|---|---|
interface Iterable |
forEach, iterator, spliterator |
Closes this channel. Idempotent.
Buffered values remain receivable. Pending senders fail with ChannelClosedException. After all buffered values are drained, subsequent receives also fail.
true if this call actually closed the channelCreates an unbuffered (rendezvous) channel.
Creates a channel with the specified buffer capacity.
capacity - the maximum buffer size; 0 for unbufferedReturns the number of values currently buffered.
Returns this channel's buffer capacity.
Returns true if this channel has been closed.
Receives the next value from this channel.
The returned Awaitable completes when a value is available. Receiving from a closed, empty channel fails with ChannelClosedException.
Sends a value through this channel.
The returned Awaitable completes when the value has been delivered to a receiver or buffered. Sending to a closed channel fails immediately with ChannelClosedException.
value - the value to send; must not be null