Scala的未来firstcompletedof超时

时间:2018-12-10 12:10:30

标签: scala concurrency

我认为我在理解firstCompletedOf时遇到问题。给定一个即将完成的未来和一个未完成的未来,我在运行以下命令四次时会超时。

给出此方法f:

def f = {
  val completingFuture = Future {
    1
  }
  val nonCompletingFuture = Future {
    while (true) {}
  }
  val combinedFuture = Future.firstCompletedOf(List(
   completingFuture,
    nonCompletingFuture
  ))
  val result = Await.result(combinedFuture, 10.seconds)
  println(result)
}


f
f
f
f

当我如上所述运行四次时,出现超时异常。所以我认为不可能有这样的例外,因为完整的未来总会回来。

例外是

  

线程“ main”中的异常java.util.concurrent.TimeoutException:期货在[10秒]之后超时

我在哪里弄错了?

1 个答案:

答案 0 :(得分:0)

您的任务while (true) {}永远不会完成。它永远在执行上下文中阻塞线程。因此,每次运行f时,您都会在执行上下文中丢失一个线程,直到该线程用完线程并开始接收超时。