代码之家  ›  专栏  ›  技术社区  ›  ddinchev

RxJava2并行执行一组completable并等待全部完成

  •  15
  • ddinchev  · 技术社区  · 6 年前

    我想执行几种阻塞方法(网络调用、计算任务)。我想处决他们 并行 并在全部完成时收到通知,或在其中任何一个失败时收到错误(引发异常)。它们不会发出这样的结果 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 回复  |  直到 6 年前
        1
  •  31
  •   marianosimone    6 年前

    您可能想使用 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 :( */ }
    );