是否等效/更好地工作
从功能上看,它似乎是等效的,我想区别在于“语义”:
- 我们是否在可以访问事件内部状态的边界之内?
- 或者我们是否将此事件接口视为向我们公开流的被动源
这是正确的想法吗?
Event
和之间的主要区别在于Observable
它们如何处理状态和取消订阅。
事件函数附加到源事件并且不给您任何取消订阅的方法。如果您使用有状态组合器(如Event.scan
),然后将多个观察者附加到结果事件,那么它们都会看到相同的状态。
可观察函数构造处理管道的“规范”。当您将处理程序附加到IObservable
值时,您会返回一个IDisposable
可用于删除所有处理程序的值。每个附加到的处理程序都IObservable
将获得一个新状态(因为运行时根据“规范”创建一个新的处理链)。
在实践中,主要区别在于 statfullness——如果你想共享状态,你可以使用Event
模块——实现相同的使用Observable
是可能的,但更难。
如果你在里面使用事件async
,那么你应该使用Observable
and AwaitObservable
(而不是内置的AwaitEvent
),因为使用事件组合器会泄漏内存——它会附加永远不会删除的事件处理程序。