2017-07-11 7 views
2

私はandThenメソッドを使用して将来のアクションステージを登録しようとしています。このように:Scala Futureと理解する

implicit val executionContext = ExecutionContext.global 

val f = Future(0) 
f.andThen { 
    case r => println(r.get + "1") 
} andThen { 
    case r => println(r.get + "2") 
} 

このメソッドは非同期に実行し、 戻り値を生成しませんので、スローされた致命的でない例外が のExecutionContextに報告されます。

非同期的にはどういう意味ですか?これは、将来の実行自体とは非同期であることを意味しますか?

答えて

7

非同期的にはどういう意味ですか?これは、将来の実行そのものを と非同期に処理することを意味しますか?

それはandThenの実行が発信さFuture[T]完了後ExecutionContextが提供する特定のスレッドで発生することを意味します。

私たちは実装を見れば:

def andThen[U](pf: PartialFunction[Try[T], U])(implicit executor: ExecutionContext): Future[T] = { 
    val p = Promise[T]() 
    onComplete { 
    case r => try pf.applyOrElse[Try[T], Any](r, Predef.conforms[Try[T]]) finally p complete r 
    } 
    p.future 
} 

このメソッドはUnitを返す側もたらす方法であるFuture.onCompleteオーバースマートラッパーです。与えられた関数を適用し、元のFuture[T]の結果を返します。ドキュメントに記載されているように、将来登録されるいくつかのonCompleteコールバックの順序を保証したい場合に便利です。

関連する問題