事件及FSharp可观测(Event and Observable in FSharp)

2019-08-17 19:54发布

难道当量/更好的工作

  • 与事件模块上的事件类型
  • 或可观察的发布事件的性质

在功能上似乎相当,我想不同的是“语义”:

  • 难道我们在那里是有意义的访问事件的内部状态的边界内?
  • 或者,我们考虑这个事件接口从该流暴露给我们一个被动源

那是正确的思维?

Answer 1:

之间的主要区别EventObservable是如何处理状态和未订阅。

  • 事件的功能附加到源事件,不给你任何退订方式。 如果你使用状态组合程序(如Event.scan ),然后附加多个观察员所产生的事件,那么他们都将看到相同的状态。

  • 可观察到的功能构建处理管线的“规格”。 如果您将处理程序IObservable值,你回来了IDisposable ,可以用来去除所有的处理程序。 附连到每个处理机IObservable会得到一个新的状态(因为运行时根据“规范”创建一个新的处理链)。

在实践中,主要的区别是在statfullness -如果你想分享的状态,您可以使用Event模块-实现相同的使用Observable是可能的,但更难。

如果您使用的内部事件async ,那么你应该使用ObservableAwaitObservable (而不是内置AwaitEvent ),因为使用事件组合程序将导致内存泄漏-它会附上没有拆除事件处理程序。



文章来源: Event and Observable in FSharp