Как изменить время ожидания в составных фьючерсах? - PullRequest
6 голосов
/ 13 июля 2011

В примере из документации 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 создает всего четыре фьючерса?

  • По одному на каждое сообщение, отправленное актеру1, 2 и 3
  • Один, чтобы обернуть эти три будущего

В первом случае легко изменить время ожидания, например,

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

но как я могу установить таймаут для будущего упаковки? Есть идеи?

1 Ответ

6 голосов
/ 14 июля 2011

Я считаю, что на самом деле было бы 6 фьючерсов, 3 из которых вы получили от актеров, и 1 для каждого метода flatMap / map.

Тайм-аут для 3-х фьючерсов актеров устанавливается точно так же, как вы заявили, но 3-й фьючерс-обертка будет наследовать тайм-аут из будущего в правой части каждого раздела для понимания. Однако возвращаемое будущее будет использовать тайм-аут первого будущего для понимания.

Для Akka 2.0 это изменится, чтобы разрешить указание неявного тайм-аута, если во время тестирования не возникает проблем.

...