Deferred

cats.effect.kernel.Deferred
See theDeferred companion object
abstract class Deferred[F[_], A] extends DeferredSource[F, A], 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.

Attributes

Companion
object
Source
Deferred.scala
Graph
Supertypes
trait DeferredSink[F, A]
trait DeferredSource[F, A]
trait Serializable
class Object
trait Matchable
class Any
Show all
Known subtypes
class AsyncDeferred[F, A]

Members list

Value members

Concrete methods

def mapK[G[_]](f: FunctionK[F, G]): Deferred[G, A]

Modify the context F using transformation f.

Modify the context F using transformation f.

Attributes

Source
Deferred.scala

Inherited methods

def complete(a: A): F[Boolean]

If this Deferred is empty, sets the current value to a, and notifies any and all readers currently blocked on a get.

If this Deferred is empty, sets the current value to a, and notifies any 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]

Attributes

Inherited from:
DeferredSink
Source
Deferred.scala
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.

Attributes

Inherited from:
DeferredSource
Source
Deferred.scala
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.

Attributes

Inherited from:
DeferredSource
Source
Deferred.scala