これはかなりオープンな質問であり、私はお詫び申し上げます。差異Await.readyとAwait.result
私はそのAwait.ready
戻りAwaitable.type
Await.result
しばらく戻っT
を見ることができますが、私はまだそれらを混乱させる。
2つの違いは何ですか?
1つはブロックされ、もう1つはブロックされませんか?
これはかなりオープンな質問であり、私はお詫び申し上げます。差異Await.readyとAwait.result
私はそのAwait.ready
戻りAwaitable.type
Await.result
しばらく戻っT
を見ることができますが、私はまだそれらを混乱させる。
2つの違いは何ですか?
1つはブロックされ、もう1つはブロックされませんか?
これらは両方とも将来が完了するまでブロックされますが、その違いは戻り値の型だけです。
def a = Future { Thread.sleep(2000); 100 }
def b = Future { Thread.sleep(2000); throw new NullPointerException }
Await.ready(a, Duration.Inf) // Success(100)
Await.ready(b, Duration.Inf) // Failure(java.lang.NullPointerException)
Await.result(a, Duration.Inf) // 100
Await.result(b, Duration.Inf) // crash with java.lang.NullPointerException
:あなたの
Future
が例外をスローした場合
違いが便利です
一般に、両方ともブロックしています。
違いは、一定時間内に未完了(成功または失敗)になるまで、Await.ready
がブロックされていることです。
唯一の違いはAwaitable
が準備完了になり、結果タイプがT
になるまでready
ブロックであることです。
Postscriptum:実際には あなたはエラーチェックやログインのようないくつかのアクションを実行したい場合は、結果を構成し、エラーをスローするようにしたい場合は、何かが間違っテイクAwait.result(...)
になった場合、あなたはAwait.ready(...)
を取るだろう。
経験則として、Awaitを避けてください。