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.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 anotherunderlying
context, to which it defers for:Deferring the rest of the queue happens:
underlying
contextblocking
context, the rest of the tasks get re-scheduled for execution on theunderlying
context to prevent any deadlocksThus this implementation is compatible with the
scala.concurrent.BlockContext
, detectingblocking
blocks and reacting by forking the rest of the queue to prevent deadlocks.