我看到了什么
import java.util.concurrent.Executors
import scala.concurrent.{ExecutionContext, Await, Future}
import scala.concurrent.duration._
val numJobs = 50000
var numThreads = 10
// customize the execution context to use the specified number of threads
implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(numThreads))
// define the tasks
val tasks = for (i <- 1 to numJobs) yield Future {
// do something more fancy here
i
}
// aggregate and wait for final result
val aggregated = Future.sequence(tasks)
val oneToNSum = Await.result(aggregated, 15.seconds).sum
然而,这并没有成功完成。
我不知道为什么。我想也许Await.result是原因。
请注意解决方案。
答案 0 :(得分:1)
Await.result
等待固定时间并返回Awaitable
的结果,在本例中为Future
。只有在Future成功的情况下才能获得结果。否则,它会抛出异常(TimeoutException,如果已经过了最大等待时间)。但是,它不是使用Await
作为阻止的最佳选择。
更好的解决方案是
import scala.util._
aggregated.onComplete {
case Success(x) => println(x.sum)
case Failure(e) => println(e)
}