有人可以解释Observable和ConnectableObservable之间的区别吗? Rx扩展文档非常稀疏,我不明白在什么情况下ConnectableObservable有用。
此类在Replay / Prune方法中使用。
最佳答案
简短答案:IConnectableObservable
表示可以与多个订户共享的挂起的热观测。调用IConnectableObservable.Connect()
会使更改变为热(可观察到冷源)
长答案:
可以观察到的冷现象(如Observable.Range
)为每个订户重放序列。这与秒表类似,每个订户都有自己的秒表。订户通过订阅来启动秒表,一旦观察者停止观察,秒表就会停止(并重置)。
热门观察者在所有订户之间共享序列。就像只有一只秒表,所有订户都将获得相同的时间读数,而不论他们何时开始观看。IObservable.Publish
将冷的可观测值转换为热的可观测值,但返回IConnectableObservable
。这使订户可以在(单个)秒表启动之前对其进行订阅。调用IConnectableObservable.Connect()
将启动秒表。放置Connect()
返回值将停止秒表。
值得注意的是,某些可观察到的来源天生就是热点。例如,无论我们是否订阅鼠标事件,都可以触发鼠标事件。在这种情况下,所有可连接的可观察对象将要做的就是共享单个事件订阅。