data fetching flow (updated)- each flow use its own thread (Scheduler.io)
我是Rxjava的初学者,我无法弄清楚如何用Rxjava方式表达红色和黄色箭头。
我遇到的困难是:
收集所有可观察数据,但不进行交错。
observable是可变的,而不是红色箭头中的固定数字。
我看书和搜索但是越来越头痛,我不知道应该走哪条路。对于红色箭头部分,我可以像往常一样使用阻塞队列,但是用Rxjava方式编写整个链可能更好。
答案 0 :(得分:0)
我不确定我能理解这个问题。
假设这是一个问题:
List<DATA>
的任务开始,让我们称之为批量数据; 据我所知,你已经开始了,你的任务现在正在生成Observable<Data>
代替List<DATA>
。
这是我要改变的第一件事:因为你关心批次的内部顺序,我会保留列表,从而使你的任务返回Observable<List<DATA>>
。
所以你最终会得到一堆Observable<List<DATA>>
,每个并行任务一个:
List<Observable<List<DATA>>> tasks = ...;
List<Observable<List<DATA>>> parallelTask = new Arraylist(tasks.size());
for (Observable<List<DATA>> task : tasks) {
// execute all the task in a separate thread
// change Schedulers to your own pool schedulers if you want
parallelTask.add(task.scheduleOn(Schedulers.io()));
}
Observable.merge(parallelTasks)
.concatMap(batch -> Observable.from(batch)) // read below
.observeOn(Schedulers.computation()) // or whichever thread you want to process the data
.subscribe(data -> {
// process data as it comes
}, throwable -> {
// handle error
});
这就是它的作用
concatMap
将批处理(List<DATA>
)转换为类型为DATA
的事件流,保留其顺序(在此结束之前,您不会从不同批次获取数据)