簡體   English   中英

為什么“未來”過程無法在Scala上完成?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM