我有以下代码,每隔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秒钟调用一次,但是当另一个调用花费更多时间完成调用时,调度程序内部的调用会被阻塞,因为所有调用都不是异步调用。
如果上述情况有任何问题,请告诉我。
答案 0 :(得分:1)
onResponseReceived
在UI线程中执行。由于只有一个UI线程,因此它执行的所有事件都将排队,不会重叠。
答案 1 :(得分:0)
这可能是由连接限制引起的。
在Web浏览器中同时连接到一个域是有限制的。如果超出此限制,连接将排队。
根据网络浏览器,您可以拥有8-6甚至只有2个IE连接。请参阅此question。
您可以尝试增加默认限制并检查这是否是问题。