AndroidSchedulers.mainThread отмечает onError раньше, чем onNext
Сегодня я застрял, как я был в беде о AndroidSchedulers.mainThread()
Obervable.create(emitter -> {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
// Thread.sleep(10);
emitter.onError(new RuntimeException("error"));
}).subscribeOn(io())
.doOnEach(logger)
.observeOn(AndroidSchedulers.mainThread())
.doOnEach(logger)
.subscribe();
Бывший регистратор распечатал 1, 2, 3 и ошибку по порядку, но последний не будет. Вместо некоторых onNext
игнорируются и onError
доставлен раньше. Это намеренно? Я не верю этому. Как я могу избежать этого поведения? Если я закомментирую Thread.sleep(10)
, это прекрасно работает.
аппендикс
Благодаря akarnokd я внимательно прочитал JavaDoc и обнаружил, что Observable#observeOn(Scheduler)
будет расставлять приоритеты onError
чем onNext
, Я должен был использовать Observable#observeOn(Scheduler, boolean)
Перегрузка для принудительного исполнения всех событий наблюдается в строгом порядке.