从其他方法返回await()

时间:2011-10-03 21:03:48

标签: java playframework web-frameworks

我是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中可以吗?

提前感谢您的答案:)

2 个答案:

答案 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();
}