我试图使用Observable.range(1,1000).publish()
和Observable.interval(500, TimeUnit.MILLISECONDS).publish()
来理解Hot Observable
和Hot Flowable
。
- 当我使用
range()
而不是interval()
来创建可观察/可流动时,无需暂停线程即可实现主线程等待一段时间。 在范围完成之前,Main()
不会退出。interval()
功能不会发生同样的情况。 - 此外,当我使用
range()
而不是interval()
来创建可观察/可流动时,我必须先订阅观察者/订阅者,然后再connect()
否则不会收到任何项目。使用interval()
一切都按我预期工作。
有人可以解释为什么会发生这种情况吗?是range()
的实施还是我不明白什么?
观察者的示例,并在此处查看可流动/订阅者的示例。
range()
运算符很冷,会尽快发出所有项目。如果没有施加背压,所有项目都将在最初的几微秒内发射。
interval()
运算符是冷的,随着时间的推移逐个发出其项目;第一个项目在定义的间隔之后发出。如果您在主线程中订阅,并且您的主程序退出,您将看不到 interval()
运算符的任何结果,因为没有足够的时间过去。这意味着您要么必须在观察者链上阻塞,要么提供等待所需结果的外部方法。