今天我因为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)
重载来强制执行严格排序中观察到的所有事件。