web-dev-qa-db-ja.com

RxJava2は、多数のCompletableを並行して実行し、すべてが完了するのを待ちます

いくつかのブロッキングメソッド(ネットワーク呼び出し、計算タスク)を実行したいと思います。それらを実行したい並列そしてそれらのすべてが完了したときに通知されるか、それらのいずれかが失敗した場合(例外をスローする)にエラーを受け取ります。それらは結果を出さないので、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._と記載されています。それらを並行して実行するソリューションは見つかりません。

10
ddinchev

おそらく使用したい 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 :( */ }
);
19
marianosimone