我有以下代码,每 3 秒异步执行一次
<Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
@Override
public boolean execute() {
try {
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, "someurl");
Request response = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
}
public void onResponseReceived(Request request, Response response) {
// do some work
}
});
} catch (RequestException e) {}
return true;
}
}, 3000);
下面的代码需要很长时间才能完成。
try {
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, "someurl");
Request response = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
}
public void onResponseReceived(Request request, Response response) {
// do some work which takes long time to finish
}
});
} catch (RequestException e) {}
我期望调度程序每 3 秒进行一次调用,但是当另一个调用需要更多时间才能完成时,调度程序内的调用就会被阻塞,这不应该是因为所有都是异步调用。
如果上述情况有任何问题,请告诉我。
最佳答案
onResponseReceived
在 UI 线程中执行。由于只有一个UI线程,因此它执行的所有事件都会排队并且不会重叠。
关于java - GWT 中的异步调用是否会由于另一个需要很长时间才能完成的异步调用而被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31885226/