Есть ли какие-либо преимущества в использовании не асинхронных действий в Play Framework 2.2?
Play 2.2 документация говорится, что:
Из-за того, как работает Play, код действия должен быть максимально быстрым (т. Е. Неблокирующим). Так что же нам возвращать в качестве результата, если мы еще не можем его сгенерировать? Ответ - будущий результат!
Future [Result] будет в конечном итоге выкуплен значением типа Result. Предоставляя Future [Result] вместо обычного Result, мы можем быстро сгенерировать результат без блокировки. Тогда Play будет служить этому результату, как только обещание будет погашено.
Веб-клиент будет заблокирован во время ожидания ответа, но на сервере ничего не будет заблокировано, и ресурсы сервера могут использоваться для обслуживания других клиентов.
Действия, которые возвращают будущее, созданыAction.async
в отличие отAction.apply
для нормальных, не асинхронных действий.
Есть ли польза от не асинхронных действий? Мне кажется, что лучший способ убедиться, что ни одно из моих действий не будет заблокировано, - это объявить их все, используяAction.async
.
На самом деле, согласноДокументация по Play Framework 2.3 похоже в Play 2.3 все действия асинхронные:
Примечание. Как Action.apply, так и Action.async создают объекты Action, которые обрабатываются одинаково. Существует один вид действий, который является асинхронным, а не два вида (синхронный и асинхронный). Конструктор .async - это просто средство для упрощения создания действий на основе API, которые возвращают будущее, что упрощает написание неблокирующего кода.