2014-12-05 2 views
8

Недавно у меня были обсуждения с коллегами по поводу использования или whenReady или .futureValue от ScalaFutures в ScalaTest по сравнению с Await.result в тестах. Помимо читаемости, согласованности конфигурации (тайм-аутов) и определения результатов при использовании whenReady, есть ли другие заметные преимущества использования методов ScalaFutures над Await.result?Преимущества использования ScalaFutures от ScalaTest против Await.result

Я заметил, что ScalaFutures использует технологию «опроса» вместо блокировки, как Await, но может ли кто-то уточнить преимущества?

+0

Вы нашли что-нибудь еще на этом? Я также задавался вопросом, каковы преимущества/недостатки каждого – gnorsilva

+0

Не совсем, я думаю, что это в основном то, что я сказал, согласованность в настройке тайм-аутов и переменных областей при использовании whenReady для меня является самым полезным. – jgagnon1

ответ

0

Когда вы используете Await.result, вы блокируете вызывающий поток. Эффект этого будет наиболее заметным, если вы проверили свои тесты однопоточным способом (например, с настройкой SBT, например parallelExecution in Test := false).

Опрос, сделанный ScalaFutures выполняется (afaik) через планировщик; следовательно, он не блокирует нить. В результате у вас может быть несколько одновременно выполняемых тестов, которые намного превосходят потоки, доступные для любого ExecutionContext, на котором фактически выполняются тесты.

+0

Реализация 'futureValue' по умолчанию использует Thread.sleep для заданного интервала, который блокирует поток. –

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