scala的未来首次完成时超时

loading...


1

我认为我在理解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秒]后超时

我哪里弄错了?

loading...

1回答

  • 0

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

评论

暂时没有评论!