I watched the video和我知道一般原则-即使没有人订阅,热也会发生,“按需”会发生冷。
此外,Publish()将冷转换为热,而Defer()将热转换为冷。

但是,我仍然感觉不到细节。以下是我想回答的一些问题:

  • 您可以为这些术语提供全面的定义吗?
  • 在热的可观察对象上调用Publish或在冷的观察对象上调用Defer是否有意义?
  • 热/冷转换的方面是什么-例如,您丢失了消息吗?
  • IObservable和IEnumerable的热定义和冷定义之间是否有区别?
  • 为冷或热编程时,应考虑哪些一般原则?
  • 关于热/冷可观察物的其他提示吗?
  • 最佳答案

    我希望这有帮助。



    请参阅我的博客文章:http://leecampbell.blogspot.com/2010/08/rx-part-7-hot-and-cold-observables.html



    不,不是我能想到的。



    当Observable为Hot时,可能会“丢失”消息,因为无论订阅者如何,都会发生“事件”。



    我真的不明白这个问题。我希望这个比喻能有所帮助。我将比较热的可观察值与热切的IEnumerable。即列表或数组都经过认真评估,并且即使没有人枚举它们也已被填充。从Yield关键字懒惰地评估从文件或数据库获取值的yield语句。虽然懒惰可能会很好,但是默认情况下,如果在其上运行第二个枚举器,则会重新评估它。将这些与可观测值进行比较,“可观测的热点”可能是事件(单击按钮)或温度的馈送。无论订阅如何,这些事件都会发生,如果对同一观测站进行了多个订阅,这些事件也会共享。 Observable.Interval是Cold可观察的一个很好的例子。只有在进行订阅时,它才会开始产生值。如果进行了多个订阅,则将重新评估顺序,并且“事件”将在不同的时间发生(取决于订阅之间的时间)。



    请引用第一点中的链接。我还建议您研究将Publsh与RefCount结合使用。这使您能够具有Cold Observables的惰性评估语义,但可以共享Hot Observables获得的事件。



    让您的手变脏并与他们一起玩耍。一旦阅读了30分钟以上,与他们一起编码所花的时间就比阅读更多的东西对您的生产力高得多:)

    10-06 02:59