Futureクラスの機能を整理してみました。
基本機能
Futureを使う上で必須の基本機能として以下の5メソッドをピックアップしました。
- onSuccess
- onFailure
- onComplete
- isCompleted
- value
残念ながら、Futureの完了待ち合わせの機能はメソッドとしては用意されておらず、Awaitオブジェクトを使う必要があります。
汎用コンビネータ
"いつもの"コンビネータです。Futureはモナドなので、Scalaのモナドとして綺麗に動くようなコンビネータ群が提供されています。
- foreach
- map
- flatMap
- filter
- withFilter
- collect
- zip
- andThen
エラー処理
Futureはエラー処理に関するメソッドが多数用意されています。基本機能の中でエラー処理にも分類できるものは併記してその旨を記述しています。
- onFailure (基本機能)
- onComplete (基本機能)
- failed
- transform
- recover
- recoverWith
- fallbackTo
並列プログラミングの論点の一つは、非同期実行の結果発生したエラーをどのようにハンドリングするのか、という点です。
scala.parallel.Futureでは、問答無用に例外を送出する仕様になっていましたが、これでは事実上(1)アプリケーション全体をアボートさせる、(2)ログに残しておく処理などをした後、例外を無視する、といった大雑把な例外処理しかできません。
本格的な応用ではより精密なエラーハンドリングが必要になりますが、scala.concurrent.Futureはこのあたりのメカニズムが整備されています。
Scalaz 6 Promiseと比較しても、例外処理機能の充実はScala 2.10 Futureのアドバンテージといえます。
並列処理
並列処理を扱うメソッドとしては以下のものが当てはまります。
- either
- zip (汎用コンビネータ)
- fallbackTo (エラー処理)
Futureの同期は、Futureの内部処理とAwaitオブジェクトが行うこともあり、ここに分類できるFutureのメソッドはそれほど多くありません。Futureクラスにあるのはコンビネータとして実現すると便利なものになります。
その他
以上のどれにも分類できないメソッドです。
- mapTo
諸元
- Scala 2.10.0-M7
- Scalaz 6.0.4
0 件のコメント:
コメントを投稿