首页 > 解决方案 > Retrofit Call.enqueue() 按创建的顺序发送请求?

问题描述

想象一下这个场景:

我使用 Call.enqueue() 方法启动requestA,然后,在requestA完成之前,我在requestA的同一端点启动requestB。当我使用 Call.enqueue() 方法时,requestB将在requestA之后执行?还是 enqueue() 方法只是用于异步请求?

我在 docs 和 StackOverflow 上搜索了这些信息,但是关于这个特定方法的所有信息都是肤浅的。

这是我的代码 - 这两个请求都使用相同的代码:

foolRequest.enqueue(new Callback<Response>() {
                    @Override
                    public void onResponse(@NonNull Call<Response> call,
                            @NonNull retrofit2.Response<Response> response) {
                        //do something
                    }

                    @Override
                    public void onFailure(@NonNull Call<Response> call, 
                            @NonNull Throwable t) {
                       //do something
                    }
                });

标签: androidretrofit2

解决方案


我认为是这样,否则,如果您实现自己的连接客户端。从OkHttpClient的源码来看,有一个dispatcher类,保存所有enqueue API,使用queue保存相关任务

synchronized void enqueue(AsyncCall call) {
    if (runningAsyncCalls.size() < maxRequests && runningCallsForHost(call) < maxRequestsPerHost) {
      runningAsyncCalls.add(call);
      executorService().execute(call);
    } else {
      readyAsyncCalls.add(call);
    }
}

推荐阅读