Продолжения работают в основном с использованием метода await()
, который доступен через ваш контроллер. Метод await может принимать два разных типа параметров (на самом деле существует 6 перегрузок метода, но это простые вариации двух тем).
Первый вызывает await с тайм-аутом. Это может быть в миллисекундах или может быть указано с помощью строкового литерала, выражающего время, например. 1s
на 1 секунду и т. д.
Второй вызов — это вызов await с объектом Future
, чаще всего использующий реализацию Java Future в Play под названием Promise (в libs.F). Обещание возвращается, когда обещание выполнено, в том смысле, что событие, которое вызывается как часть обещания, завершено. Однако Promise может быть больше, чем одно событие, это может быть несколько событий. Есть даже варианты сказать waitAny, чтобы он ждал возврата только одного из многих событий.
Таким образом, оба подхода в основном приводят к тому, что событие произойдет в какой-то момент в будущем. Первое предопределено, второе зависит от того, сколько времени потребуется для выполнения Обещания.
Продолжения воспроизведения — это способ упростить кодирование этой структуры событий. Вы можете ввести код, который говорит
// do some logic
await(timeout or promise);
// continue the execution
За кулисами освобождается поток HTTP, чтобы Play мог более эффективно обрабатывать больше одновременных запросов. И когда тайм-аут или обещание выполнено, метод продолжает выполняться, и вам не нужно кодировать какую-либо конкретную обработку для повторного запуска потока выполнения.
Взяв код с сайта Play для продолжений, там написано
public static void loopWithoutBlocking() {
for(int i=0; i<=10; i++) {
Logger.info(i);
await("1s");
}
renderText("Loop finished");
}
Это фактически завершает поток выполнения 10 раз и запускает новый поток после ожидания в 1 секунду. Все это совершенно прозрачно с точки зрения программиста и позволяет вам интуитивно создавать приложения, не беспокоясь о создании неблокирующих приложений, поскольку все это волшебным образом обрабатывается Play!
person
Codemwnci
schedule
01.10.2011