2016-08-03 11 views
0

私たちは、コードのこの部分を知っていた:私は3秒と言う期間の有限値を入れた場合Duration.Infで待っているインスタンスをブロックするのがベストプラクティスですか?

Await.result(someFuture, Duration.Inf) 

、一度期限が切れ、それはTimeOutExceptionをスローします。

Duration.Infについては、アプリケーションがハングすることがありますか? Duration.Infを使用する際のベストプラクティスは何ですか?

答えて

3

Duration.Infを使用する場合のベストプラクティスは何ですか?

のベストプラクティスは次のように、全くAwaitを使用してブロックし、非同期Futureを処理するためのコールバックのいくつかの並べ替えを使用しないことであろうmapforeachonSuccessonFailureなど、あなたのユースケースに応じて。

何らかの理由でAwaitを使用してブロックする必要がある場合(実際にこれを行う理由はほとんどないはずです)、妥当な制限を持つ有限のDurationを設定する必要があります。たとえば、someFutureが通常5秒かかると分かっている場合は、おそらくタイムアウトを10秒に設定します。さもなければ、Futureが完了しない場合、Awaitを呼び出すスレッドは、が永久にハングする可能性があります。良い

何もあなたがアプリケーションは、長年の懸案Futureを待ってハングアップしているようにしたいない限り、Duration.Infを使用してから出てきませんし、そうすることは絶対的に重要であることができます。しかし、一般的には、全く応答しないよりもクラッシュさせるほうが良いです。

関連する問題