Trait/Object

scala.concurrent

BlockContext

Related Docs: object BlockContext | package concurrent

Permalink

trait BlockContext extends AnyRef

A context to be notified by scala.concurrent.blocking when a thread is about to block. In effect this trait provides the implementation for scala.concurrent.Await. scala.concurrent.Await.result() and scala.concurrent.Await.ready() locates an instance of BlockContext by first looking for one provided through BlockContext.withBlockContext() and failing that, checking whether Thread.currentThread is an instance of BlockContext. So a thread pool can have its java.lang.Thread instances implement BlockContext. There's a default BlockContext used if the thread doesn't implement BlockContext.

Typically, you'll want to chain to the previous BlockContext, like this:

val oldContext = BlockContext.current
val myContext = new BlockContext {
  override def blockOn[T](thunk: =>T)(implicit permission: CanAwait): T = {
    // you'd have code here doing whatever you need to do
    // when the thread is about to block.
    // Then you'd chain to the previous context:
    oldContext.blockOn(thunk)
  }
}
BlockContext.withBlockContext(myContext) {
  // then this block runs with myContext as the handler
  // for scala.concurrent.blocking
}
Source
BlockContext.scala
Linear Supertypes
Type Hierarchy
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. BlockContext
  2. AnyRef
  3. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Abstract Value Members

  1. abstract def blockOn[T](thunk: ⇒ T)(implicit permission: CanAwait): T

    Permalink

    Used internally by the framework; Designates (and eventually executes) a thunk which potentially blocks the calling Thread.

    Used internally by the framework; Designates (and eventually executes) a thunk which potentially blocks the calling Thread.

    Clients must use scala.concurrent.blocking or scala.concurrent.Await instead.