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

时间:2011-05-07 12:22:09

标签: java playframework

在playframework的文档here中写了:

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?

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

1 个答案:

答案 0 :(得分:6)

这在Play 1.1中的工作方式是使用suspend函数,该函数在Play 1.2中用await()替换。在1.1中,挂起函数没有在同一点启动该过程,而只是在该过程“暂停”指定的时间后,使用相同的输入调用该方法。

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

Play 1.2和使用await之间的区别在于,方法的重新启动是在幕后完成的,并且它在停止的位置重新启动方法,因此也应该保留变量的状态。 / p>

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