代码之家  ›  专栏  ›  技术社区  ›  marsop

一个可观测的Rx有多少“温度”?

  •  3
  • marsop  · 技术社区  · 6 年前

    在Rx.Net的所有文献中,都提到了众所周知的 温度 一个可观察到的。

    冷观测 (比如 Observable.Interval() 和类似的工厂方法),每次创建新订阅时都会产生副作用。

    另一方面 (就像 Subject<T> )当新的订阅到来时,它们将被载入其中。

    还有 ,就像那些 RefCount() 它将在每次创建一个订阅时执行初始化,但前提是没有其他活动订阅。解释了这些热观测的行为 here 作者:Dave Sexton:

    或者,您可以调用Publish-then-RefCount来获取在多个连续观察者之间共享的IObservable。请注意,这并不是一个真正的热观测-它更像是一个温暖的观测。当查询中至少有一个观察者时,RefCount对基础observable进行单个订阅。当查询没有更多的观察者时,将引用计数更改为0,则释放基础订阅。如果另一个观察者稍后订阅了您的查询,将引用计数从0再次移动到1,那么RefCount将对基础的观察者进行新的订阅,从而导致订阅的副作用再次发生。

    有没有其他需要注意的温度?有没有可能通过编程获得可观测物体的温度?

    1 回复  |  直到 6 年前
        1
  •  6
  •   Shlomo    6 年前

    先问简单问题:

    有没有可能通过编程获得可观测物体的温度?

    observable“contract”指定,当您订阅一个observable时,您将获得零个或多个OnNext消息,可选地后跟一个OnCompleted或一个OnError消息。合同没有明确说明如何对待多个或更早/更晚的订户,而这正是可观察到的“温度”最关心的问题。

    有没有其他需要注意的温度?

    我甚至不会像你所说的那样具体地或不连续地去想它。

    Observable.Return(42) ). 最热的可观测数据对温度没有影响( new Subject<int>() ). 两极之间是一个连续体。

    Observable.Interval(TimeSpan.FromMilliseconds(100)) 例如,将每100毫秒发出一个新数字。这个例子,不像 .Publish().RefCount() .Publish() 你做到了 .Replay(2).RefCount() Publish Replay 可观测物体有相同的“温度”?

    热释光;医生:别把重点放在分类上。了解两者之间的区别,并知道一些可观测到的有较冷的性质,而一些有较热的性质。