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