为什么非背压支持的Observable在收到请求通知时会继续发出项目?

时间:2016-06-26 20:42:11

标签: rx-java

根据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通知?

1 个答案:

答案 0 :(得分:2)

1.x中的背压是半强制的。这些来源只是忽略了请求,而其他一些中间操作员可能会报告MissingBackpressureException,如果他们无法跟上。 2.x将变得更加严格,如果它们无法发出它们的值,则源自身会发出错误信号。