abstract class Deferred[F[_], A] extends AnyRef
A purely functional synchronization primitive which represents a single value which may not yet be available.
When created, a 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 and
all readers currently blocked on a call to get
.
complete(a)
on a Deferred
that has already been completed will not modify
its content, and result in a failed F
.
Albeit simple, Deferred
can be used in conjunction with Ref to build
complex 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.
- Source
- Deferred.scala
- Alphabetic
- By Inheritance
- Deferred
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new Deferred()
Abstract Value Members
- abstract def complete(a: A): F[Unit]
If this
Deferred
is empty, sets the current value toa
, and notifies any and all readers currently blocked on aget
.If this
Deferred
is empty, sets the current value toa
, and notifies any and all readers currently blocked on aget
.Note that the returned action may complete after the reference has been successfully set: use
F.start(r.complete)
if you want asynchronous behaviour.If this
Deferred
has already been completed, the returned action immediately fails with anIllegalStateException
. In the uncommon scenario where this behavior is problematic, you can handle failure explicitly usingattempt
or any otherApplicativeError
/MonadError
combinator on the returned action.Satisfies:
Deferred[F, A].flatMap(r => r.complete(a) *> r.get) == a.pure[F]
- abstract def get: F[A]
Obtains the value of the
Deferred
, or waits until it has been completed.Obtains the value of the
Deferred
, or waits until it has been completed. The returned value may be canceled.
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @HotSpotIntrinsicCandidate()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def mapK[G[_]](f: ~>[F, G]): Deferred[G, A]
Modify the context
F
using transformationf
. - final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
This is the API documentation for the cats-effect library.
See the cats.effect package for a quick overview.
Links
Canonical documentation links:
Related Cats links (the core):