RxJava 並行でリクエストをして, リクエストした順番で値を受け取る
Created at Thu, May 4, 2017結論
- concatEagerを使う
concat, concatEager
RxJavaにはconcatEagerと, concatオペレータがあります. 似た名前ですが, 振る舞いは異なります. concatEagerはconcatと違い, 並列にObservableは処理するけど, 返してくる順番は保証されています
- concat: 直列にObservableを処理し, 返してくる順番は保証されている
- concatEager: 並列にObservableを処理し, 返してくる順番は保証されている
コードで説明すると,
// o1 ----> |
// o2 |------>|
// | |
// s ------o1------o2
Observable.concat(o1, o2)
.subscribe();
// o1 ----------->|
// o2 -->---------|-|
// | |
// s ------------o1-o2
Observable.concatEager(o1, o2)
.subscribe();
みたいな感じになります. 繰り返しになりますが ,concatEagerは同時に与えたObservableを解釈し, 順番を守ってくれます.