RxJava2并行执行一堆Completables并等待所有完成

时间:2018-03-20 14:16:08

标签: java rx-java rx-java2

我想执行几种阻止方法(网络调用,计算任务)。我想执行它们并行,并在所有这些都完成时收到通知,如果其中任何一个失败则会收到错误(抛出异常)。它们不会发出结果,因此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.。我找不到可以并行执行它们的解决方案。

1 个答案:

答案 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 :( */ }
);