根据Observable Contract,
不实施背压的Observable应该响应 通过发出OnError通知从观察者发出请求通知 表示不支持背压。
但是,我尝试了下面的内容并没有通知onError。 而且,它甚至忽略了请求通知。
Observable.interval(1L, TimeUnit.MICROSECONDS)
.subscribe(new Subscriber<Long>() {
@Override
public void onStart() {
super.onStart();
request(1L);
}
@Override
public void onNext(Long t) {
System.out.println("t=" + t);
}
@Override
public void onCompleted() {
System.out.println("completed");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
});
我认为observable会在订阅者向不支持背压的Observable发送请求通知时发送OnError通知,如Observable联系人所说。
由于它没有以OnError通知结束,并且开发人员可能认为请求通知正在运行,因此经过严格测试的应用程序可能存在在产品发布后很难被发现的错误。
有没有理由不发送OnError通知?
答案 0 :(得分:2)
1.x中的背压是半强制的。这些来源只是忽略了请求,而其他一些中间操作员可能会报告MissingBackpressureException,如果他们无法跟上。 2.x将变得更加严格,如果它们无法发出它们的值,则源自身会发出错误信号。