Rxjs 有多少;温度“;是否存在可观测的Rx?

Rxjs 有多少;温度“;是否存在可观测的Rx?,rxjs,system.reactive,Rxjs,System.reactive,在Rx.Net的所有文献中,都有关于可观测的温度的参考文献 有冷观测(类似于Observable.Interval()和类似的工厂方法创建的观测),每次创建新订阅时都会产生副作用 在光谱的另一端,有热观测(如主题),它们将在新订阅到来时提供新的订阅 还有热观测,如RefCount()返回的观测,它将在每次创建一个订阅时执行初始化,但前提是没有其他活动订阅。Dave Sexton解释了这些热观测的行为: 或者,您可以调用Publish-then-RefCount来获取在多个连续观察者之间共享的IO

在Rx.Net的所有文献中,都有关于可观测的温度的参考文献

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

在光谱的另一端,有热观测(如
主题
),它们将在新订阅到来时提供新的订阅

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

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

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

首先是一个简单的问题:

是否有可能以编程方式获得可观测物体的温度

不,你能做的就是订阅,看看会发生什么

可观察的“契约”指定,当您订阅可观察的内容时,您会收到零条或多条OnNext消息,可选地后跟一条OnCompleted消息或一条OnError消息。合同没有具体说明如何对待多个或更早/更晚的订户,这是可观察的“温度”最关心的问题

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

我甚至不会像你所说的那样具体地或离散地考虑它

我从订阅效应的角度来考虑它:最冷的可观测对象的所有效应都发生在订阅上(比如
Observable.Return(42)
)。最热门的观察对象对订阅没有影响(
newsubject()
)。在这两极之间是一个连续体

Observable.Interval(TimeSpan.frommillistics(100))
将每隔100毫秒发出一个新的数字。与
Observable.Return(42)
不同,该示例主要通过
.Publish().RefCount()
进行“预热”:第一个订阅者启动数字,但第二个订阅者将只看到最新的数字,而不是从0开始。但是,如果您没有执行
.Publish()
,而是执行了
.Replay(2).RefCount()
,则会产生一些订阅效果。
Publish
Replay
观测值是否具有相同的“温度”


TL;博士:不要太关注分类。理解二者之间的区别,并知道一些可观测物具有较冷的性质,而一些具有较暖的性质。

尽管我理解你的意思,但我发现很难理解为何如此重要的因素被排除在类型之外(热观测和冷观测之间的差异仅对观测提供者清晰,对观测者完全不透明。).我听到了。这可能是观测值混淆的最大来源。早期的文档特意解释了这一点,所以他们肯定知道可能的混淆。没有一个端口(我知道)我对此也做了些什么,所以我不确定是否真的有改进的余地。也许你错过了我的另一篇博文,在那篇博文中我深深陷入了温度:事实上我确实读过,但只是在发布了问题之后。干得好;)