gpt4 book ai didi

events - FSharp 中的事件和可观察对象

转载 作者:行者123 更新时间:2023-12-03 12:44:40 27 4
gpt4 key购买 nike

是否等效/更好地工作

  • Event moduleEvent type
  • 或在 publish 上使用 Observable事件的属性

  • 从功能上看,它似乎是等效的,我想区别在于“语义”:
  • 我们是否在可以访问内部状态的边界内?
    事件 ?
  • 或者我们正在考虑这个event interface作为一个被动源,我们可以从中看到一个流

  • 这是正确的想法吗?

    最佳答案

    Event 之间的主要区别和 Observable在于他们如何处理状态和取消订阅。

  • 事件 函数附加到源事件,并且不给您任何取消订阅的方法。如果您使用有状态组合器(如 Event.scan ),然后将多个观察者附加到结果事件,那么它们都会看到相同的状态。
  • 可观察 函数构造处理管道的“规范”。当您将处理程序附加到 IObservable 时值,你会得到一个 IDisposable可用于删除所有处理程序。每个处理程序都附加到 IObservable将获得一个新的状态(因为运行时根据“规范”创建了一个新的处理链)。

  • 在实践中,主要区别在于 statfullness - 如果要共享状态,可以使用 Event模块 - 使用 Observable 实现相同的功能是可能的,但更难。
    如果您在 async 中使用事件, 那么你应该使用 ObservableAwaitObservable (而不是内置的 AwaitEvent ),因为使用事件组合器会泄漏内存 - 它会附加永远不会删除的事件处理程序。

    关于events - FSharp 中的事件和可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15549384/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com