チャンネル トップ 制御構造 フューチャ 目次

フューチャ

ReplyReactorActor トレイトは、戻り値を返す通信演算(!! メソッド)をサポートし、それらは即時にフューチャ (future) を返す。フューチャとは Future トレイトのインスタンスのことで、フューチャ付きメッセージ通信 (message send-with-future) への応答を取得することができる。

フューチャ付きメッセージ通信の送信者は、フューチャを適用 (apply)することでフューチャの応答を待機することができる。例えば、val fut = a !! msg によってメッセージを送信した後、送信者はフューチャの結果を以下のようにして待機できる: val res = fut().

また、isSet メソッドを用いて Future の戻り値が入手可能かどうかをブロックせずに調べることができる。

フューチャ付きメッセージ通信だけがフューチャを得る方法ではない。フューチャは future メソッドの計算結果として作成することができる。以下の例では、body の計算は並行して開始され、戻り値としてフューチャを返す:

val fut = future { body }
// ...
fut() // フューチャの待機

フューチャが、アクターの文脈において特別なのは、receive などの標準的なアクターによる受信演算を用いてその結果を取得できることだ。さらに、reactreactWithin などのイベントによる演算も使うことができる。これによりアクターは、内部スレッドをブロックせずにフューチャの戻り値を待機することができる。

アクターによる受信演算はフーチャの inputChannel により実現されている。Future[T] 型のフューチャに対して、これは InputChannel[T] 型を持つ。具体例としては:

val fut = a !! msg
// ...
fut.inputChannel.react {
  case Response => // ...
}

2010年11月30日

チャンネル トップ 制御構造 フューチャ 目次