10.2.4 Buffered Asynchronous Channels
The bindings documented in this section are provided by the racket/async-channel library, not racket/base or racket.
See also Thread Mailboxes.
(async-channel? v) → boolean? v : any/c
Returns #t if v is an asynchronous channel,
#f otherwise.
(make-async-channel [limit]) → async-channel? limit : (or/c exact-positive-integer? #f) = #f
Returns an asynchronous channel with a buffer limit of limit
items. A get operation blocks when the channel is empty, and a put
operation blocks when the channel has limit items already.
If limit is #f, the channel buffer has no limit (so
a put never blocks).
The asynchronous channel value can be used directly with sync. The channel blocks until async-channel-get would return a value, and the unblock result is the received value.
(async-channel-get ach) → any/c ach : async-channel?
Blocks until at least one value is available in ach, and then
returns the first of the values that were put into
async-channel.
(async-channel-try-get ach) → any/c ach : async-channel?
If at least one value is immediately available in ach,
returns the first of the values that were put into ach. If
async-channel is empty, the result is #f.
(async-channel-put ach v) → void? ach : async-channel? v : any/c
Puts v into ach, blocking if ach’s buffer
is full until space is available.
(async-channel-put-evt ach v) → evt? ach : async-channel? v : any/c
Returns a synchronizable event that is blocked while
(async-channel-put ach v) would block. The unblock result is
the event itself. See also sync.
Examples: | |||||||||||||||||||||||||||||||||||||||||||||
|