mar*_*sop 3 system.reactive rxjs
在整个Rx.Net文献中,都提到了通常所知的可观察温度.
有冷可观察对象(如由Observable.Interval()类似的工厂方法创建的那些),每次创建新的订阅时都会产生副作用.
在频谱的另一方面,有一些热门的观察者(比如Subject<T>)会随着新的订阅而来.
还有一些温暖的可观察对象,就像RefCount()每次创建一个订阅时返回的那些将执行初始化,但仅在没有其他有效订阅时才会执行.这些温暖观测的行为解释这里由Dave塞克斯顿:
或者,您可以调用Publish然后调用RefCount来获取在多个连续观察者之间共享的IObservable.请注意,这不是一个真正的热门观察 - 它更像是一个温暖的可观察者.RefCount对底层observable进行单个订阅,而至少有一个查询观察者.当您的查询没有更多观察者时,将引用计数更改为0,将处理基础订阅.如果另一个观察者稍后订阅了您的查询,再次将引用计数从0移动到1,则RefCount会对基础observable进行新的订阅,从而导致订阅副作用再次发生.
是否有人应该注意的其他温度?是否有可能以编程方式获得Observable的温度?
简单问题:
是否有可能以编程方式获得Observable的温度?
不,你能做的就是订阅,看看会发生什么.
可观察的"契约"指定当您订阅一个observable时,您将获得零个或多个OnNext消息,可选地后跟一个OnCompleted或一个OnError消息.合同没有具体说明如何处理多个或更早/更晚的订户,这是可观察到的"温度"主要关注的内容.
是否有人应该注意的其他温度?
我甚至不会像你指定的那样以具体或不连续的方式来考虑它.
我从on-subscribe效果的角度来考虑它:最冷的可观察者的所有效果都发生在订阅上(比如Observable.Return(42)).最热门的可观察量对subscribe(new Subject<int>())没有影响.在这两极之间是一个连续统一体.
Observable.Interval(TimeSpan.FromMilliseconds(100))例如,每100毫秒会发出一个新数字.这个例子不同Observable.Return(42),可以通过以下方式进行"热身" .Publish().RefCount():第一个用户启动数字,但第二个用户只会看到最新的数字,而不是从0开始.但是,如果不是.Publish()你做的话.Replay(2).RefCount(),那么你有一些订阅效应正在进行中.执行Publish与Replay观测具有相同的"温度"?
TL; DR:不要过多关注分类.理解两者之间的区别,并知道一些可观察的属性具有较冷的属性而一些具有较暖的属性.