Class/Object

cats.effect.concurrent

Deferred

Related Docs: object Deferred | package concurrent

Permalink

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
Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Deferred
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new Deferred()

    Permalink

Abstract Value Members

  1. abstract def complete(a: A): F[Unit]

    Permalink

    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.

    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 an IllegalStateException. In the uncommon scenario where this behavior is problematic, you can handle failure explicitly using attempt or any other ApplicativeError/MonadError combinator on the returned action.

    Satisfies: Deferred[F, A].flatMap(r => r.complete(a) *> r.get) == a.pure[F]

  2. abstract def get: F[A]

    Permalink

    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

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  5. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  6. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  7. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  8. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  9. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  10. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  11. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  12. def mapK[G[_]](f: ~>[F, G]): Deferred[G, A]

    Permalink

    Modify the context F using transformation f.

  13. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  14. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  15. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  16. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  17. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  18. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  19. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  20. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from AnyRef

Inherited from Any

Ungrouped