我有一种情况,我希望将来同时执行多个任务,这样,如果其中一个失败,其他任务仍然可以执行。如果失败了,我想记录一下错误。我希望我的父线程能够判断每个线程是否成功,然后根据该线程执行一些操作。例如,如果其中一项期货失败,则打印“嘿,其中一项期货失败”
val futureA = Future(doTaskThatReturnsABoolean)
val futureB = Future(doTaskThatReturnsABoolean)
val futureC = Future(doTaskThatReturnsABoolean)
futureA.onFailure (case t => println(future A failed ) + t.getMessage)
futureB.onFailure (case t => println(future B failed ) + t.getMessage)
futureC.onFailure (case t => println(future C failed ) + t.getMessage)
if (one of these futures failed) {
println("One of the futures failed")
throw new someNewError
}
Run Code Online (Sandbox Code Playgroud)
如果任何或所有的期货都失败了,我想记录他们的堆栈跟踪记录,但是在所有期货都有机会运行之前,我不想使整个程序出错。因为他们可能由于不同的原因而出错,所以我不想只重复他们的错误,而是想抛出一个新的错误。
我一直在阅读http://docs.scala-lang.org/overviews/core/futures.html,但无法理解这一点。
我不想使用“等待”,因为这需要时间,并且我想给期货提供尽可能多的时间。现在,让我们假设它们“将”完成,但是不确定的时间范围完全取决于数据大小。