Я создал следующий класс для демонстрации проблемы:
public class TestRx {
public void run() {
// RxJava2
new CompositeDisposable().add(completableRxJava2()
.subscribeOn(io.reactivex.schedulers.Schedulers.computation())
.andThen(testSingleRxJava2())
.observeOn(io.reactivex.schedulers.Schedulers.newThread())
.subscribe(
this::success,
Throwable::printStackTrace));
// RxJava1
new CompositeSubscription().add(completableRxJava1()
.subscribeOn(Schedulers.io())
.andThen(testSingleRxJava1())
.observeOn(Schedulers.computation())
.subscribe(
this::success,
Throwable::printStackTrace));
}
private io.reactivex.Completable completableRxJava2() {
return io.reactivex.Completable.fromAction(() ->
System.out.println("completableRxJava2 " + Thread.currentThread().getName()));
}
private io.reactivex.Single<String> testSingleRxJava2() {
return io.reactivex.Single.fromCallable(() -> {
System.out.println("testSingleRxJava2 " + Thread.currentThread().getName());
return "END";
});
}
private Completable completableRxJava1() {
return Completable.fromAction(() ->
System.out.println("completableRxJava1 " + Thread.currentThread().getName()));
}
private Single<String> testSingleRxJava1() {
return Single.fromCallable(() -> {
System.out.println("testSingleRxJava1 " + Thread.currentThread().getName());
return "END";
});
}
private void success(final String s) {
System.out.println(s);
System.out.println();
}
}
Когда я выполнил метод run()
, это вывод:
completableRxJava2 RxComputationThreadPool-1
testSingleRxJava2 RxComputationThreadPool-1
END
completableRxJava1 RxIoScheduler-2
Я не понимаю некоторыхвещи в этом результате.
- Почему
testSingleRxJava2
не выполняется на RxNewThreadScheduler
? - Почему RxJava1 не выполняет метод
testSingleRxJava1
?
Иногда вывод еще более запутан, и результат только такой:
completableRxJava2 RxComputationThreadPool-1
testSingleRxJava2 RxComputationThreadPool-1
END
Нет вывода RxJava1.
Почему это происходит?
Версия RxJava1: 1.3.8 Версия RxJava2: 2.2.9