ExecutionContext Must Be Stack-safe
// Demonstrating that directly executing runnables in your
// ExecutionContext is a really bad idea
def trigger(cycles: Int): Future[Int] = {
implicit val directEC =
new ExecutionContext {
def execute(r: Runnable) = r.run()
def reportFailure(e: Throwable) = throw e
}
val p = Promise[Int]()
val f = (0 until cycles).foldLeft(p.future)((f, _) => f.map(_ + 1))
p.success(0)
f
}
// Throws StackOverflowError
trigger(5000)
| Written by Alexandru Nedelcu