【发布时间】:2016-04-20 20:48:50
【问题描述】:
在 Scala 中,我可以使用 Await 等待未来完成。但是,如果我注册了一个回调以在该未来完成时运行,我如何不仅等待未来完成,还等待该回调完成?
这里有一个最小但完整的程序来说明这个问题:
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration
import scala.concurrent.{ Await, Future }
object Main {
def main(args: Array[String]): Unit = {
val f: Future[Int] = Future(0)
f.onSuccess { case _ =>
Thread.sleep(10000)
println("The program waited patiently for this callback to finish.")
}
// This waits for `f` to complete but doesn't wait for the callback
// to finish running.
Await.ready(f, Duration.Inf)
}
}
我希望输出是:
The program waited patiently for this callback to finish.
相反,没有输出;程序在回调结束前退出。
请注意,这与等待未来完成不是同一个问题,之前已在 this question 回答过。
【问题讨论】:
标签: scala concurrency future