【问题标题】:Akka future.await does not return when there is a timeoutAkka future.await 超时时不返回
【发布时间】:2012-04-23 09:47:18
【问题描述】:

我是 Akka 新手,在 Akka 1.2 中调用 Future.await 时遇到问题。我已经创建了一些带有 OnTimeout 和 OnException 处理程序的 Futures,然后我正在等待它们完成。代码如下所示:

val futures = ListBuffer.empty[Future[Any]]
val future = (peer ? bMsg) onResult {
      case result => result match {
          case msg:Ack => handleAck(msg)
          case msg:Nack => handleNack(msg)
        }
    } onTimeout {
      case _ => {
          // do something
      }
    } onException {
      case _ => {
          // do something
      }
    }
futures += future

futures.foreach(_.await(Duration(8000, "millis")))
log.info("Got here")

当出现异常时,异常处理程序被执行,然后我进入“Got here”行。但是,当超时时,虽然超时处理程序被执行,但我永远不会到达“到达这里”行。即使设置了 AtMost 值,await 也不会返回。

这可能是什么原因造成的?

【问题讨论】:

  • 嗨!如果您是 Akka 新手,为什么要使用非常旧的版本? 1.3.1 是 1.x 系列中的最新版本,但我们在 2 个月前发布了 2.0,它非常棒,以至于它保证了 2.0 的名称。
  • 好问题 :) 虽然我是 Akka 的新手,但该项目已经进行了一年多,并且仍在使用 1.2。不过,我们应该很快就会使用 1.3.1。

标签: scala akka future


【解决方案1】:

await 如果超时则抛出异常,您是否已确认您在 futures.foreach 中没有收到异常?

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 2021-06-03
    • 2016-07-14
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多