【发布时间】:2016-08-03 00:43:17
【问题描述】:
我们知道这段代码:
Await.result(someFuture, Duration.Inf)
如果我设置一个有限的持续时间值,比如 3 秒,一旦过期,它就会抛出 TimeOutException。
Duration.Inf 怎么样,恐怕应用程序挂起。使用 Duration.Inf 的最佳做法是什么?
【问题讨论】:
标签: scala concurrency java.util.concurrent
我们知道这段代码:
Await.result(someFuture, Duration.Inf)
如果我设置一个有限的持续时间值,比如 3 秒,一旦过期,它就会抛出 TimeOutException。
Duration.Inf 怎么样,恐怕应用程序挂起。使用 Duration.Inf 的最佳做法是什么?
【问题讨论】:
标签: scala concurrency java.util.concurrent
使用
Duration.Inf的最佳做法是什么?
最佳实践是完全不使用Await 进行阻塞,并使用某种回调来异步处理Future,例如map、foreach、onSuccess、onFailure 等,具体取决于您的用例。
如果您出于某种原因必须阻止使用Await(实际这样做的原因应该很少),您应该设置一个有限的Duration 并具有合理的限制。例如,如果您知道someFuture 通常需要 5 秒才能完成,则可以将超时设置为 10 秒。否则,如果Future 没有完成,调用Await 的线程可以永远挂起。
使用Duration.Inf 不会带来任何好处,除非您希望应用程序无限期地挂起,等待过期已久的Future,这样做是绝对关键的。但总的来说,让它崩溃总比完全不响应要好。
【讨论】: