RxJava2-range()vs interval()

时间:2019-01-04 10:30:15

标签: kotlin rx-java2

我正在尝试使用Hot ObservableHot Flowable来了解Observable.range(1,1000).publish()Observable.interval(500, TimeUnit.MILLISECONDS).publish()

  1. 当我使用range()而不是interval()创建一个Observable / Flowable时,无需暂停Thread即可使主线程等待一会儿。在范围完成之前,Main()不会退出。 interval()函数不会发生同样的情况。
  2. 此外,当我使用range()而不是interval()创建一个Observable / Flowable时,我必须在connect()之前先订阅Observer / Subscriber,否则就不会收到任何项目。使用interval()一切都会按照我的预期进行。

有人可以解释为什么会这样吗?是range()的实现,还是我不了解某些内容?

您可以查看Observable / Observer here和Flowable / Subscriber here的示例。

1 个答案:

答案 0 :(得分:1)

range()运算符很冷,并尽快发射其所有项目。如果没有施加背压,则所有项目将在前几微秒内发射出去。

interval()操作员很冷,并且随着时间的推移逐个发射其项目;在定义的时间间隔后发出第一项。如果您订阅了主线程,而主程序退出了,则您将看不到interval()运算符的结果,因为还没有经过足够的时间。这意味着您要么必须阻塞观察者链,要么提供一种外部方法来等待所需的结果。