2016-02-17 7 views
3

Я использую play framework, я читаю, что Play обрабатывает каждый запрос не блокирующим способом. Какая разница между Блокировкой & Не блокирующее будущее в Scala?Что не блокирует и блокирует будущее в Scala?

Также предоставьте информацию о Будущем & Метод Await.Result() Спасибо !!!

+1

Руководство для начинающих, ориентированное на новичков (3 года, но все еще действительное) можно найти здесь: http://danielwestheide.com/blog/2013/01/09/the-neophytes-guide-to-scala- part-8-welcome-to-the-future.html – manub

ответ

3

Если Await.Result() вызывается в любой момент до завершения Future, то блокируется Future. Если вы вместо этого используете onComplete, onSuccess, onFailure, map или flatMap (и некоторые другие методы), вы регистрируете функцию обратного вызова, которая будет возникать при возврате Future. Таким образом, Future не блокирует. Используйте неблокирующие Future с обратными вызовами, когда это возможно.

+0

Я новичок в Scala. Означает ли это, что Await блокирует исполняемый поток? Я не понимаю язык «Будущее становится блокирующим». –

+0

Да, исполняемый поток блокируется до тех пор, пока ожидаемое 'Future' не завершится – kliew

+0

Спасибо. Что помогает. Теперь я пытаюсь понять, что, помимо «Await.result», есть что-то, что можно сделать в пределах в будущем, то есть в Будущем {}, который вызовет (скажем, непреднамеренно), Будущее, чтобы заблокировать ? Например, скажем, если я использую вызовы чтения блокировки файла Java в пределах . Будет ли это заставлять будущее блокироваться? –