是否相同/更好地工作
在功能上它看起来是等价的,我猜不同之处在于语义' :
这是正确的想法吗?
答案 0 :(得分:25)
Event
和Observable
之间的主要区别在于它们如何处理状态和取消订阅。
事件函数会附加到源事件,并且不会为您提供取消订阅的任何方式。如果您使用有状态组合器(如Event.scan
)然后将多个观察者附加到结果事件,那么它们将看到相同的状态。
可观察函数构造处理管道的“规范”。当您将处理程序附加到IObservable
值时,您将获得可用于删除所有处理程序的IDisposable
。附加到IObservable
的每个处理程序将获得一个新状态(因为运行时根据“规范”创建一个新的处理链)。
在实践中,主要区别在于statfullness - 如果你想共享状态,你可以使用Event
模块 - 使用Observable
实现相同但可能更难。
如果您使用async
内的事件,那么您应该使用Observable
和AwaitObservable
(而不是内置AwaitEvent
),因为使用事件组合器会泄漏内存 - 它将附加从未删除的事件处理程序。