当前位置: 代码迷 >> java >> GWT中的异步调用是否由于另一个异步调用而被阻塞,这需要很长时间才能完成
  详细解决方案

GWT中的异步调用是否由于另一个异步调用而被阻塞,这需要很长时间才能完成

热度:22   发布时间:2023-07-26 14:13:17.0

我有以下每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线程,因此由它执行的所有事件都将排队,并且不会重叠。

这可能是由连接限制引起的。

在Web浏览器中同时连接到一个域有一个限制。 如果超出此限制,连接将排队。

取决于Web浏览器,IE可能有8-6个连接,甚至只有2个连接。 看到这个 。

您可以尝试增加默认限制并检查是否是问题所在。

  相关解决方案