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

Ste*_*fen 6 scala actor akka

在关于组成期货的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()
Run Code Online (Sandbox Code Playgroud)

我是对的,akka在这个例子中总共创造了四个期货吗?

  • 每个消息一个发送给actor1,2和3
  • 一个包装这三个未来

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

val f1 = actor1 !!! (msg1, 15000)  // sets timeout to 15 seconds
Run Code Online (Sandbox Code Playgroud)

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

小智 6

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

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

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