我是Play的新手!我有一个关于HTTP中异步编程的问题。 我有一段这样的代码:
public void someMethod() {
for (int i = 0; i < 100; i++) {
doSomething();
await(someTime);
}
}
用户通过发送GET / POST请求来调用此方法。 它进行了一些计算( doSomething()),然后等待一段时间。 但是:用户必须能够从 await(someTime)“返回”,并且循环应该继续下一次迭代,而不必等待所有“someTime”时间。
示例代码:
public void nextAwait() {
continueАForLoop();
}
用户通过GET / POST调用nextAwait()方法。 如果调用它,循环将继续,并且(必须)立即调用 doSomething()!
那么,在Play中可以吗?
提前感谢您的答案:)
答案 0 :(得分:2)
对此的简单回答是等待一段较短的时间,然后检查一些用于用户交互的值,然后继续等待。
例如,假设你的总等待时间是10秒public void someMethod() {
for (int i = 0; i < 100; i++) {
doSomething();
for (int j=0; j<10; j++) {
if (!userInterrupt) await("1s");
}
}
}
因此,这会将您的等待时间缩短为1秒,并检查一个值以查看用户是否已中断等待。这意味着用户将在处理释放之前等待最多1秒钟。
答案 1 :(得分:0)
我不知道它是否以这种方式工作但你可以尝试这样的事情:(你有一个字段监视器=新的Object()某处)
synchronized ( this.monitor ) {
this.monitor.wait( someTime );
}
并在您调用的另一种方法中:
synchronized ( monitor ) {
this.monitor.notifyAll();
}