Deferred
abstract class Deferred[F <: ([_$1] =>> Any), A] extends DeferredSource[F, A] with DeferredSink[F, A]
A purely functional synchronization primitive which represents a single value
which may not yet be available.
which may not yet be available.
When created, a
and never be made empty again.
Deferred
is empty. It can then be completed exactly once,and never be made empty again.
get
on an empty Deferred
will block until the Deferred
is completed.get
on a completed Deferred
will always immediately return its content.complete(a)
on an empty Deferred
will set it to a
, and notify any andall readers currently blocked on a call to
get
.complete(a)
on a Deferred
that has already been completed will not modifyits content, and result in a failed
F
.Albeit simple,
complex concurrent behaviour and data structures like queues and semaphores.
Deferred
can be used in conjunction with Ref to buildcomplex concurrent behaviour and data structures like queues and semaphores.
Finally, the blocking mentioned above is semantic only, no actual threads are
blocked by the implementation.
blocked by the implementation.
- Companion
- object
Value members
Methods
Inherited methods
Obtains the current value of the
Deferred
, or None if it hasn't completed.- Inhertied from
- DeferredSource
Obtains the value of the
The returned value may be canceled.
Deferred
, or waits until it has been completed.The returned value may be canceled.
- Inhertied from
- DeferredSource
If this
any and all readers currently blocked on a
Deferred
is empty, sets the current value to a
, and notifiesany and all readers currently blocked on a
get
. Returns true.If this
Deferred
has already been completed, returns false.Satisfies:
Deferred[F, A].flatMap(r => r.complete(a) *> r.get) == a.pure[F]
- Inhertied from
- DeferredSink