await()如何在游戏中发挥作用?

ses*_*ses 3 java playframework

在playframework的文档,这里已被写入:

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

我真的不明白它是如何工作的:

例如,当我们在第一个请求中调用方法i = 1,然后..解锁并等待..并且新请求转到方法然后它再次从i = 0开始?当第一次请求唤醒时,它会有i = 1或0或2?

它在这里没有使用任何有状态机制?比如在请求之间存储i ..

Cod*_*nci 6

这在Play 1.1中的工作方式是使用suspend函数,它在Play 1.2中用await()替换.在1.1中,暂停功能没有在同一点开始关闭进程,而只是在进程"暂停"指定的时间后,使用相同的输入简单地调用该方法.

这样做的原因是为了确保"休眠"的线程没有阻止其他请求被处理(尝试在开发模式下,只运行1个线程,等待10秒,你仍然可以发送第二个请求,它被处理).所以,在Play1.1中,你必须保持状态.

Play 1.2和使用await的区别在于,方法的重新启动是在幕后完成的,并且它在停止的位置重新启动方法,因此还应保留变量的状态.

在您的示例中(取自文档),它应该简单地从0循环到9,并在每个点等待1秒.如果您没有遇到这种情况,那么我认为这是一个错误.