我认为我在理解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 回答
你的任务
while (true) {}
永远不会完成 . 它永远阻塞执行上下文中的线程 . 因此,每次运行f
时,都会在执行上下文中丢失一个线程,直到线程耗尽并开始接收超时 .