Finagleを使うときに出てくるので、そのメモ書き。
随時更新します。
Future自体は同期的
com.twitter.util.Futureは「計算がまだ完了していない可能性がある」ことを示す単なるモナドなので、非同期処理機構自体は分離されていて、Future 自体は非同期では動かない。
com.twitter.util.Future.applyの挙動を参照。
Future.apply と Future.value
APIドキュメントにも記述があるが、Future.valueは定数(constant value)をFutureでリフトすることを明示的に示すもの。
Future.value("hogefuga")
一方、Future.applyは計算自体をFutureでリフトするもの。これには Exception などをラップする機能がある。
def func: String = throw new Exception
val future = Future(func)
future.isThrow // => true