我想执行几种阻止方法(网络调用,计算任务)。我想执行它们并行,并在所有这些都完成时收到通知,如果其中任何一个失败则会收到错误(抛出异常)。它们不会发出结果,因此Observable.zip()
对我没有帮助。
到目前为止,我有:
Completable a = computationTaskA();
Completable b = computationTaskB();
Completable c = computationTaskC();
Completable all = Completable.concat(Arrays.asList(a, b, c))
.subscribe(() -> {
// all succeed
}, e -> {
// any fails
});
但是Completable.concat()
文档说Returns a Completable which completes only when all sources complete, one after another.
。我找不到可以并行执行它们的解决方案。
答案 0 :(得分:11)
您可能想要使用Completable.merge/mergeArray
Completable a = computationTaskA();
Completable b = computationTaskB();
Completable c = computationTaskC();
Completable all = Completable.mergeArray(a, b, c);
all.subscribe(
() -> { /* success all around! */ },
e -> { /* at least one failure :( */ }
);