.net - Rx 中的 IConnectableObservables

标签 .net system.reactive reactive-programming

有人可以解释一下 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/

相关文章:

f# - 基于无限序列的 Observable 动画图表

c# - 如何使用 Reactive Extensions 来缓存、节流和中继多个事件?

angularjs - RxJS 和 WebWorker

java - 如何知道下游订阅者何时调用 onNext()?

rxjs - fromFetch 运算符不会在取消订阅时重置缓存

c# - 在 C# 桌面应用程序中创建动态 Web 控件

c# - 大量的 BigInteger 日志问题

r - 在连接到 PostgreSQL 的 Shiny 应用程序中设置数据刷新

.net - 实际显示时,我的控件大小怎么会是 NaN?

.net - 带有数字的 Powershell 排序对象名称不正确