android - 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
}
});
解决方案
我认为是这样,否则,如果您实现自己的连接客户端。从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);
}
}
推荐阅读
- vue.js - VueJS + Vue-Flickity TypeError:WEBPACK_IMPORTED_MODULE_0_vue_flickity.a 不是构造函数
- django - 如何限制经过身份验证的用户代表其他人发帖?
- c - 如何解决 GCC optimization-miss 错误 90271?
- javascript - 如何使用 Jest 模拟“window.screen.orientation.lock”功能?
- java - 无法在 Spring Boot 应用程序中将放置在 src/main/resources/static/css/ 文件夹中的 css 文件提供给客户端
- java - 将 CSV 文件转换为 XLS 文件,逗号有问题
- php - 将“显示单一变体”代码添加到 functions.php 时出错
- sql-server - 无法在 T-SQL CTE 中增加值
- firebase - 退出 Flutter 应用程序不会返回登录页面
- github - 部署失败 - 添加子模块问题 - 使用 Netlify