为什么Future的进程没有在scala上完成?

时间:2015-11-14 15:59:02

标签: scala exit future

我看到了什么

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是原因。

请注意解决方案。

1 个答案:

答案 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)
}