[英]Why does not the process with Future finish on scala?
我看到了什么
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是原因。
請注意解決方案。
Await.result
等待固定時間並返回Awaitable
的結果,在這種情況下為Future
。 只有未來成功,您才能獲得結果。 否則,將引發異常(TimeoutException,如果經過了最長等待時間)。 但是,使用Await
作為阻止不是最好的選擇。
更好的解決方案是
import scala.util._
aggregated.onComplete {
case Success(x) => println(x.sum)
case Failure(e) => println(e)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.