6

先物の作成に関するakka1.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が合計4つのフューチャーを作成するのは正しいですか?

  • アクター1、2、および3に送信されるメッセージごとに1つ
  • これらの3つの未来を包むもの

最初のケースでは、タイムアウトを変更するのは簡単です。

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

しかし、どうすればラッピングフューチャーのタイムアウトを設定できますか?何か案は?

4

1 に答える 1

6

実際には、合計6つの先物、アクターから取得した3つ、および各flatMap/mapメソッドに1つが存在すると思います。

3つのアクターの先物のタイムアウトは、あなたが述べたように設定されますが、3つのラッパーの先物は、理解のための各セクションの右側にある先物からタイムアウトを継承します。ただし、返されるfutureは、for-comprehensionの最初のfutureのタイムアウトを使用します。

Akka 2.0の場合、これは変更され、テスト中に問題が発生しない限り、暗黙的なタイムアウトを指定できるようになります。

于 2011-07-13T21:13:27.283 に答える