有人可以解释一下 Observable 和 ConnectableObservable 之间的区别吗? Rx 扩展文档非常稀疏,我不明白 ConnectableObservable 在什么情况下有用。
此类用于 Replay/Prune 方法。
最佳答案
简短回答:
IConnectableObservable
表示可以与多个订阅者共享的待定热可观察对象。调用 IConnectableObservable.Connect()
导致更改为热(订阅冷源 observable)
长答案:
冷 observable(如 Observable.Range
)会为每个订阅者重播序列。它类似于秒表,每个订阅者都有自己的秒表。订阅者通过订阅来启动秒表,一旦观察者停止观察,秒表就会停止(并重置)。
热门可观察在所有订阅者之间共享序列。这类似于有一个秒表,所有订阅者都会获得相同的时间读数,无论他们何时开始观看。
IObservable.Publish
将冷 observable 转换为热 observable,但返回一个 IConnectableObservable
。这使得订阅者能够在(单个)秒表开始之前订阅它。调用 IConnectableObservable.Connect()
启动秒表。处理 Connect()
返回值会停止秒表。
值得注意的是,一些可观测的来源本质上是热门的。例如,无论我们是否订阅鼠标事件,它们都可以触发。在这种情况下,所有可连接的可观察对象所做的就是共享单个事件订阅。
关于.net - Rx 中的 IConnectableObservables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2833904/