TrampolineExecutionContext

A scala.concurrentExecutionContext implementation that executes runnables immediately, on the current thread, by means of a trampoline implementation.

Can be used in some cases to keep the asynchronous execution on the current thread, as an optimization, but be warned, you have to know what you're doing.

The TrampolineExecutionContext keeps a reference to another underlying context, to which it defers for:

  • reporting errors
  • deferring the rest of the queue in problematic situations

Deferring the rest of the queue happens:

  • in case we have a runnable throwing an exception, the rest of the tasks get re-scheduled for execution by using the underlying context
  • in case we have a runnable triggering a Scala blocking context, the rest of the tasks get re-scheduled for execution on the underlying context to prevent any deadlocks

Thus this implementation is compatible with the scala.concurrent.BlockContext, detecting blocking blocks and reacting by forking the rest of the queue to prevent deadlocks.

Value parameters:
underlying

is the ExecutionContext to which the it defers to in case real asynchronous is needed

Companion:
object
trait Executor
class Object
trait Matchable
class Any

Value members

Concrete methods

override def execute(runnable: Runnable): Unit
Definition Classes
Executor -> ExecutionContext
override def reportFailure(t: Throwable): Unit
Definition Classes

Deprecated and Inherited methods

@deprecated(message = "preparation of ExecutionContexts will be removed", since = "2.12.0")
Deprecated
[Since version 2.12.0] preparation of ExecutionContexts will be removed
Inherited from:
ExecutionContext