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