私は未来の計算をいくつか計算しています。結果を取りたいです。私はバリアントAwait.result(...)を使用しなければなりません(それはうまくいきます)。しかし、将来onSuccessメソッドがありますが、計算が終了する前に結果を取得することはできません。将来のonSuccessメソッドを使用する目的と範囲は何ですか?スカラの未来のメソッド
答えて
onSuccess
は非ブロッキングです。
val f = Future { Thread.sleep(1000) }
f.onSuccess { case _ => println("success" }
println("before success")
この意志出力:未来が正常に完了したとき
before success
success
onSuccess
は必ず実行されます。このアプローチの主な利点は、将来が完了するのを待つ間に移動して他のことを行うことができることです。
Await.result
では、Future
が完了するまで次の行に移動しません。
それはいいです、それは先物の結果を操作する素晴らしい方法です。 – gregghz
しかし、私は 'val sumF = Future {(1L〜100000L).sum}のようなコードを持っています。 sumF onSuccess {case s => println} '私はコンソールに結果が表示されるという保証はありません。 – pacman
あなたは突然、先物を使用しません。これはアプリケーションのアプローチの問題です。あなたは非同期スタイルにしたいのですか?それは必要でしたか?等々。 – sascha10000
これは非同期的なアプローチであり、制御の反転を利用しています。これは、あなたの未来が終わると、その結果が処理できることを意味します。 Futures onSuccessに最終的な計算を入れることもできます。結果がある場合にのみ計算されます。たとえば、コールバックを使わずに結果を返す必要がある場合は、未来を待つか、単純にそれを返して、必要なところで結果を処理する必要があります。
- 1. スカラ:未来
- 2. スカラ未来 - 初心者クエリ
- 3. スカラ:未来を含むタプルのベクトルをタプルのベクトルの未来に変換する
- 4. スカラ将来のakka-http
- 5. 未来を模索するか、スカラ仕様で
- 6. スカラの将来のシーケンスとタイムアウト処理
- 7. 将来とスカラ:データ型の不一致
- 8. 他の将来の未来を完了
- 9. 未完成の子とその未来
- 10. 未来と未来の違いは何ですか?
- 11. パターンは[未来[int]は]未来への変換[オプション[INT]]
- 12. 未来と未来の違いは何ですか?
- 13. 未来のUNIXタイムスタンプを未来に変える方法
- 14. フラット化の未来[どちらかT [未来、A、B]]
- 15. Javaでのスカラ・メソッドのオーバーライド
- 16. 未来[B =>未来[C])関数を使用して[A、B]〜未来[A、C]のいずれかです。
- 17. スカラflatMapのgetConstructorsメソッド(リフレクション)
- 18. 未来の送信者
- 19. 未来のAWTとスイング?
- 20. デフォルトの「未来」今年dateutil
- 21. Linq to SQLの未来は
- 22. 未来の文字列フラッター
- 23. Scala未来のエラーをキャッチ
- 24. iPhone開発の未来
- 25. Flattening List + Scalaの未来
- 26. スカラ:toArrayメソッドとマップメソッド
- 27. 未来:WPFとSilverlight
- 28. 繊維/未来ファイバー
- 29. 未来Anyは未来Eに準拠していません
- 30. スカラ未来のonSuccessコールバックが完了するのを待つ方法を教えてください。
通常、 'Await.result'は' Future'をブロックし、最初に 'Future'を使うことの利点を取り除く(ブロッキングを避ける)ので、避けるべきです。テストの時に例外がありますが、まれにしか見つかりません。 – handler