abstract class Deferred[F[_], 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.
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, notify any and all readers currently
blocked on a call to get, and return true. complete(a) on a Deferred that has already
been completed will not modify its content, and return false.
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
- DeferredSink
- DeferredSource
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new Deferred()
Abstract Value Members
- abstract def complete(a: A): F[Boolean]
If this
Deferredis empty, sets the current value toa, and notifies any and all readers currently blocked on aget.If this
Deferredis empty, sets the current value toa, and notifies any and all readers currently blocked on aget. Returns true.If this
Deferredhas already been completed, returns false.Satisfies:
Deferred[F, A].flatMap(r => r.complete(a) *> r.get) == a.pure[F]- Definition Classes
- DeferredSink
- 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.- Definition Classes
- DeferredSource
- abstract def tryGet: F[Option[A]]
Obtains the current value of the
Deferred, or None if it hasn't completed.Obtains the current value of the
Deferred, or None if it hasn't completed.- Definition Classes
- DeferredSource
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()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def mapK[G[_]](f: ~>[F, G]): Deferred[G, A]
Modify the context
Fusing transformationf. - final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- 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()