【发布时间】:2015-03-20 14:39:36
【问题描述】:
我写了这个方法:
import scala.concurrent._
import ExecutionContext.Implicits.global
import scala.util.{ Success, Failure }
object FuturesSequence extends App {
val f1 = future {
1
}
val f2 = future {
2
}
val lf = List(f1, f2)
val seq = Future.sequence(lf)
seq.onSuccess {
case l => println(l)
}
}
我期待 Future.sequence 将 List[Future] 收集到 Future[List] 中,然后等待每个期货(在我的情况下为 f1 和 f2)完成,然后在我的 Future[List] seq 上调用 onSuccess案例。
但在多次运行此代码后,它只会偶尔打印一次“List(1, 2)”,我无法弄清楚为什么它不能按预期工作。
【问题讨论】:
-
应用程序在回调执行前退出。
-
正如其他人所说。默认执行上下文在不会阻止 JVM 退出的守护线程上运行您的期货。如果这是为了快速测试,最简单的方法是在 seq 上使用 Await.result
-
那么改变执行上下文是唯一的方法吗?或者他们是另一种具有正确行为和当前执行上下文的方法(可能是异步阶段结束时的阻塞步骤,当我等待所有结果返回时不是那么糟糕吗?)
标签: scala sequence future intermittent