19
可观察是否当量/不如在Event type 事件及FSharp
- 与Event module对事件的publish财产
功能似乎等同,我猜这个区别是'语义':
- 我们是否在边界内部有权访问事件的内部状态 ?
- 或者,我们考虑这个event interface为被动源从中流暴露给我们
是正确的思维?
可观察是否当量/不如在Event type 事件及FSharp
功能似乎等同,我猜这个区别是'语义':
是正确的思维?
Event
和Observable
之间的主要区别在于它们如何处理状态和取消订阅。
事件功能附加到源事件,不给你任何退订方式。如果你使用有状态的组合器(如Event.scan
),然后将多个观察者附加到结果事件中,那么他们将看到相同的状态。
可观察函数构造处理管道的“规范”。当您将一个处理程序附加到IObservable
值时,您会收回一个IDisposable
,该值可用于删除所有处理程序。与IObservable
相连的每个处理程序都将获得一个新状态(因为运行时根据“规范”创建了一个新的处理链)。
在实践中,主要的区别是在statfullness - 如果你想分享的状态,您可以使用Event
模块 - 实现相同的使用Observable
是可能的,但更难。
如果您使用内async
事件,那么你应该使用Observable
和AwaitObservable
(而不是内置AwaitEvent
),因为使用事件组合程序将导致内存泄漏 - 它会附上没有拆除事件处理程序。
这个差距起初并不明显,而且单词(E)事件相当重载。 – nicolas 2013-03-21 14:27:08
@Nicolas这是真的。它出于历史原因(F#在'IObservable'存在之前有'Event'模块 - 也许正确的是删除它)。但说实话,如果.NET首先没有特殊的“事件”,事情就会变得更加容易,但这已经在很久以前就已经决定了:-)。 – 2013-03-21 16:56:35