Как использовать RxJava для последовательной работы нескольких потоков
Предположим, что есть 3 потока, T1, T2, T3. Как я могу заставить их работать последовательно, скажем, порядок выполнения - T1, T2, T3, T1, T2, T3... Можем ли мы использовать RxJava для его реализации?
Возможно ли, что есть 3 нити и отдельно распечатать T1, T2 или T3, и мы можем распечатать T1 T2 T3 последовательно.
1 ответ
Ты можешь использовать Observable.concat(request1, request2, request3)
, который будет выполнять запросы последовательно:
Observable<String> r1 = getObs().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
Observable<String> r2 = getObs().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
Observable<String> r3 = getObs().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
Observable<String> result = Observable.concat(r3, r2, r1);
Или, если запрос требует результата из предыдущего запроса - используйте flatMap
:
request1()
.flatMap(d -> request2(d))
.flatMap(d -> request3(d))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();