2016-08-03 4 views
0

Мы знали, что этот кусок кода:Блокировка Ожидаемые экземпляры с Duration.Inf, лучшая практика?

Await.result(someFuture, Duration.Inf) 

Если я ставлю конечное значение длительности сказать 3 секунды после того, как истек, он бросает TimeoutException.

Как насчет Duration.Inf, я боюсь, что приложение зависает. Какова наилучшая практика использования Duration.Inf?

ответ

3

Какова наилучшая практика использования Duration.Inf?

Лучше всего было бы, чтобы не блокировать с помощью Await на всех, и использовать какие-то функции обратного вызова для обработки Future асинхронно, как map, foreach, onSuccess, onFailure и т.д., в зависимости от вашего использования.

Если вы хотите заблокировать использование Await по какой-либо причине (на самом деле этого должно быть очень мало), вы должны установить конечный Duration с разумным пределом. Например, если вы знаете, что someFuture обычно занимает 5 секунд, возможно, установите тайм-аут на 10 секунд. В противном случае, вызов потока Awaitможет вешать навсегда, если Future не завершен.

Ничего хорошего не выйдет из использования Duration.Inf, если вы не хотите приложение, чтобы зависнуть в ожидании давно назревшая Future, и делает это абсолютно необходимо. Но в целом лучше разрешить ему сбой, чем вообще не реагировать.

 Смежные вопросы

  • Нет связанных вопросов^_^