我希望这有帮助。
你能给这些术语一个全面的定义吗?
请参阅我的博客文章:https ://leecampbell.com/2010/08/19/rx-part-7-hot-and-cold-observables
在热的 observable 上调用 Publish 或在寒冷的情况下调用 Defer 是否有意义?
不,不是我能想到的。
热/冷转换有哪些方面 - 例如,您会丢失消息吗?
当 Observable 为 Hot 时,可能会“丢失”消息,因为无论订阅者如何,都会发生“事件”。
IObservable 和 IEnumerable 的冷热定义有区别吗?
我真的不明白这个问题。我希望这个类比有所帮助。我会将 Hot Observable 与 Eagerly 评估的 IEnumerable 进行比较。即一个列表或一个数组都被急切地评估并且已经被填充,即使没有人枚举它们。从文件或数据库中获取值的 yield 语句可以使用 Yield 关键字进行惰性求值。虽然惰性可能很好,但默认情况下,如果第二个枚举器运行它,它会被重新评估。将这些与 Observables 进行比较,Hot Observable 可能是事件(按钮单击)或温度源;无论订阅如何,这些事件都会发生,并且如果对同一个观测值进行了多个订阅,这些事件也会被共享。Observable.Interval 是 Cold observable 的一个很好的例子。它只会在订阅时开始产生值。
在进行冷或热编程时应考虑哪些一般原则?
请参阅第一点中的链接。我还建议您研究与 RefCount 一起使用的 Publsh。这使您能够拥有冷 Observables 的惰性评估语义,但共享 Hot Observables 获得的事件。
关于热/冷可观察的任何其他提示?
弄脏你的手,和他们一起玩。一旦您阅读了超过 30 分钟的内容,那么花在编写代码上的时间对您来说比阅读任何内容都更有效率:)