我认为我在理解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秒]之后超时
我在哪里弄错了?
答案 0 :(得分:0)
您的任务while (true) {}
永远不会完成。它永远在执行上下文中阻塞线程。因此,每次运行f
时,您都会在执行上下文中丢失一个线程,直到该线程用完线程并开始接收超时。