【发布时间】:2015-04-21 18:45:54
【问题描述】:
我正在尝试等待函数在 5 秒后完成或超时,但无论我做什么,我都无法阻止以下异常。有趣的是它被父actor捕获:
java.util.concurrent.TimeoutException: Futures timed out after [5 seconds]
我尝试过的解决方案之一(来自this 问题):
val f = Future { dockerClient.execStartCmd(execCreateCmdResponse.getId()).exec() }
val result: Try[InputStream] = Await.ready(f, 5.seconds).value.get
val resultEither = result match {
case Success(t) => log.info("right")
case Failure(e) => log.info("left")
}
【问题讨论】:
-
你看到所有其他选项了吗?
Await是阻塞和邪恶的... semberal.github.io/scala-future-timeout-patterns.html -
@AndreyTyukin 谢谢你的文章。我使用询问模式解决了它。
-
人们通常会用这种“答案”做什么?关闭问题,以便没有人可以利用 semberal 的知识?
-
@AndreyTyukin 要么保持原样,要么添加一个简单的询问模式用法作为答案,说明它如何通过链接到 semberal 的文章获取详细信息来解决问题。这是我的代码的简化版本;如果你愿意,你可以使用它:pastebin.com/LXPpgWeS
-
@AndreyTyukin 或者我们可以创建一个关于它的 wiki 类型的帖子。