如何更改组合期货的超时?

时间:2011-07-13 18:45:01

标签: scala actor akka

composing futures上的akka​​ 1.1文档的示例中,我想知道如何以编程方式设置生成的未来的超时。我知道我可以在 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

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

1 个答案:

答案 0 :(得分:6)

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

3个演员期货的超时设置就像你说的那样,但3个包装期货将继续在for-comprehension的每个部分右侧的未来超时。但是,返回的未来将使用for-comprehension中第一个未来的超时。

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