【问题标题】:Blocking Awaitable instances with Duration.Inf, best practice?使用 Duration.Inf 阻塞 Awaitable 实例,最佳实践?
【发布时间】:2016-08-03 00:43:17
【问题描述】:

我们知道这段代码:

Await.result(someFuture, Duration.Inf)

如果我设置一个有限的持续时间值,比如 3 秒,一旦过期,它就会抛出 TimeOutException。

Duration.Inf 怎么样,恐怕应用程序挂起。使用 Duration.Inf 的最佳做法是什么?

【问题讨论】:

    标签: scala concurrency java.util.concurrent


    【解决方案1】:

    使用Duration.Inf 的最佳做法是什么?

    最佳实践是完全不使用Await 进行阻塞,并使用某种回调来异步处理Future,例如mapforeachonSuccessonFailure 等,具体取决于您的用例。

    如果您出于某种原因必须阻止使用Await(实际这样做的原因应该很少),您应该设置一个有限的Duration 并具有合理的限制。例如,如果您知道someFuture 通常需要 5 秒才能完成,则可以将超时设置为 10 秒。否则,如果Future 没有完成,调用Await 的线程可以永远挂起。

    使用Duration.Inf 不会带来任何好处,除非您希望应用程序无限期地挂起,等待过期已久的Future,这样做是绝对关键的。但总的来说,让它崩溃总比完全不响应要好。

    【讨论】:

      猜你喜欢
      • 2013-01-08
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多