如何并行执行可观察列表并收集结果
How to execute a list of observables in parallel and collect the result
如果有一个 Observable 列表,例如:
Observable<Msg> obs1 = getObs1();
Observable<Msg> obs2 = getObs2();
List<Observable<Msg>> listOfObs = new ArrayList<Observable<Msg>>();
listOfObs.add(obs1);
listOfObs.add(obs2);
Observabke allObs = Observable.zip(observableListOfEntries, new FuncN<List<Message2>>() {
@Override
public List<Msg> call(Object... args) {
List<Msg> message2List = new ArrayList<Msg>();
for (Object obj : args) {
message2List.add((Message2) obj);
Log.d("Msg>>>", ((Msg) obj).getMsg());
}
return message2List;
}
});
我使用了之前的代码,但似乎有问题,因为日志消息从未打印出来。我应该怎么做才能执行列表中的所有可观察对象?
Observable<Msg> obs1 = getObs1();
Observable<Msg> obs2 = getObs2();
List<Observable<Msg>> listOfObs = new ArrayList<Observable<Msg>>();
listOfObs.add(obs1.subscribeOn(Schedulers.io()));
listOfObs.add(obs2.subscribeOn(Schedulers.io()));
Observable allObs = Observable.zip(listOfObs, new FuncN<List<Msg>>() {
@Override
public List<Msg> call(Object... args) {
List<Msg> message2List = new ArrayList<Msg>();
for (Object obj : args) {
message2List.add((Msg) obj);
Log.d("Msg>>>", ((Msg) obj).getMsg());
}
return message2List;
}
});
allObs.toBlocking().single();
如果有一个 Observable 列表,例如:
Observable<Msg> obs1 = getObs1();
Observable<Msg> obs2 = getObs2();
List<Observable<Msg>> listOfObs = new ArrayList<Observable<Msg>>();
listOfObs.add(obs1);
listOfObs.add(obs2);
Observabke allObs = Observable.zip(observableListOfEntries, new FuncN<List<Message2>>() {
@Override
public List<Msg> call(Object... args) {
List<Msg> message2List = new ArrayList<Msg>();
for (Object obj : args) {
message2List.add((Message2) obj);
Log.d("Msg>>>", ((Msg) obj).getMsg());
}
return message2List;
}
});
我使用了之前的代码,但似乎有问题,因为日志消息从未打印出来。我应该怎么做才能执行列表中的所有可观察对象?
Observable<Msg> obs1 = getObs1();
Observable<Msg> obs2 = getObs2();
List<Observable<Msg>> listOfObs = new ArrayList<Observable<Msg>>();
listOfObs.add(obs1.subscribeOn(Schedulers.io()));
listOfObs.add(obs2.subscribeOn(Schedulers.io()));
Observable allObs = Observable.zip(listOfObs, new FuncN<List<Msg>>() {
@Override
public List<Msg> call(Object... args) {
List<Msg> message2List = new ArrayList<Msg>();
for (Object obj : args) {
message2List.add((Msg) obj);
Log.d("Msg>>>", ((Msg) obj).getMsg());
}
return message2List;
}
});
allObs.toBlocking().single();