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.
A
scala.concurrentExecutionContextimplementation 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
TrampolineExecutionContextkeeps a reference to anotherunderlyingcontext, to which it defers for:Deferring the rest of the queue happens:
underlyingcontextblockingcontext, the rest of the tasks get re-scheduled for execution on theunderlyingcontext to prevent any deadlocksThus this implementation is compatible with the
scala.concurrent.BlockContext, detectingblockingblocks and reacting by forking the rest of the queue to prevent deadlocks.