6

在 akka 1.1 文档中关于 compose futures 的示例中我想知道如何以编程方式设置生成的未来的超时。我知道我可以在akka.conf中调整全局超时,但我只想针对这段代码执行此操作。

示例代码如下所示

val f1 = actor1 !!! msg1
val f2 = actor2 !!! msg2

val f3 = for {
   a: Int    <- f1
   b: Int    <- f2
   c: String <- actor3 !!! (a + b)
} yield c

val result = f3.get()

在这个例子中,akka 总共创建了四个期货,我说得对吗?

  • 每条消息一个发送到 actor1、2 和 3
  • 一个包裹这三个期货

在第一种情况下更改超时很容易,例如

val f1 = actor1 !!! (msg1, 15000)  // sets timeout to 15 seconds

但是如何设置包装未来的超时时间?有任何想法吗?

4

1 回答 1

6

我相信实际上总共有 6 个期货,你从演员那里得到 3 个,每个 flatMap/map 方法有 1 个。

3 个演员期货的超时设置就像你说的那样,但是 3 个包装期货将继承未来每个部分右侧的超时。但是,返回的未来将使用第一个未来的超时时间进行理解。

对于 Akka 2.0,这将更改为允许指定隐式超时,只要在测试期间没有弹出问题。

于 2011-07-13T21:13:27.283 回答