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) Перегрузка для принудительного исполнения всех событий наблюдается в строгом порядке.

0 ответов

Другие вопросы по тегам