java - 如何并行调用多个Flowable语句?
问题描述
我有一些返回 Flowable 对象的函数调用。我必须多次调用这个函数,这个函数正在做一些网络调用。我想同时做所有这些电话。下面是代码。
包含函数的接口
public Interface XYZDownstreamService {
Flowable<String> getData(Request request);
}
下面是来电者
public List<String> getDataFromDownstreamForRequests(List<Request> requests, XYZDownstreamService service) {
List<String> dataFromDownstream = Lists.newArrayList();
for(Request request: requests) {
dataFromDownstream.add(service.getData(request).blockingFirst());
}
return dataFromDownstream;
}
我想同时执行上述函数调用以优化 for 循环。最好的方法是什么?
解决方案
您只需要使用merge
or合并您的请求flatMap
。此外,使用不同的线程来处理您的请求observeOn
。
Flowable.merge(requests
.stream()
.map(r -> service.getData(r)
.observeOn(Schedulers.io())))
.collect(toList())
).subscribe()
或者这样写:
Flowable.fromIterable(requests)
.flatMap(r -> service.getData(r)
.observeOn(Schedulers.io()))
.subscribe();
我已经回复了一个类似的问题以获取更多详细信息。
推荐阅读
- snowflake-cloud-data-platform - 雪花:外部应用/横向
- kotlin - 如何将视图边距绑定到视图模型字符串实时数据?
- angular - 如何在 Angular FontAwesone 中正确堆叠 fa 图标
- algorithm - 平均情况下 nlogn 螺母和螺栓匹配
- python - 如何使用 python 将多个文本文件中的整数加到一个新的文本文件中?
- solidity - Chainlink 上的 VRF 协调器合约是什么?
- google-cloud-platform - 什么问题导致 Google AI Platform 视频批量预测无法处理输入文件
- android - 使用 PIN 码的 Google TV Casting
- ruby-on-rails-6 - 无法运行资产:由于初始化程序而预编译
- flutter - Flutter & google maps 如何保存用户轨迹