как работает await () в игре? - PullRequest
3 голосов
/ 07 мая 2011

В документации игровой рамки здесь написано:

public static void loopWithoutBlocking() {
    for(int i=0; i<=10; i++) { 
         Logger.info(i);
         await("1s");
    }
    renderText("Loop finished");
}

Я не очень понимаю, как именно это работает:

например, когда мы вызываем метод в первом запросе i = 1, затем .. разблокируем и ждем .. и новый запрос переходит к методу, а затем снова запускает форму i = 0? и когда первый запрос проснется, он будет иметь I = 1 или 0 или 2?

Здесь не используется какой-либо механизм с отслеживанием состояния? как хранение я .. между запросом например?

1 Ответ

6 голосов
/ 08 мая 2011

Способ, которым эта работа работала в Play 1.1, заключался в использовании функции приостановки, которая была заменена в Play 1.2 на await ().В версии 1.1 функция приостановки не запускала процесс в той же точке, а просто вызывала метод с теми же входными данными после того, как процесс «приостановился» на указанное время.

Причинаэто для того, чтобы убедиться, что «спящий» поток не блокирует обработку других запросов (попробуйте в режиме Dev, где работает только 1 поток, и подождите 10 секунд, вы все равно можете отправить второй запрос, и онобработанный).Итак, в Play1.1 вы должны были бы поддерживать состояние.

Разница в Play 1.2 и использовании await заключается в том, что перезапуск метода выполняется за кулисами, и он перезапускает метод вточка, которую он остановил, поэтому состояние переменных также должно быть сохранено.

В вашем примере (взятом из документов) он должен просто зацикливаться от нуля до 9, и в каждой точке ждать 1второй.Если вы этого не испытываете, то я считаю, что это ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...