问题描述
我有以下每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秒发出一次呼叫,但是当另一个调用花费更多时间才能完成时,调度程序内部的调用就会被阻塞,这应该不是异步调用。
如果上述情况有任何问题,请告诉我。
1楼
onResponseReceived
在UI线程中执行。
由于只有一个UI线程,因此由它执行的所有事件都将排队,并且不会重叠。
2楼
这可能是由连接限制引起的。
在Web浏览器中同时连接到一个域有一个限制。 如果超出此限制,连接将排队。
取决于Web浏览器,IE可能有8-6个连接,甚至只有2个连接。 看到这个 。
您可以尝试增加默认限制并检查是否是问题所在。