可从回调方法中观察到

Observable from callback method

假设我有一个 class 它继承了遗留 API 并覆盖了一个在某些事情发生时调用的虚拟方法

type MyClass() as this =
    let somethingObservable: IObservable<Something> = ...

    override _.OnSomething(s: Something) = ...

如何将 OnSomething 的每次调用转换为 somethingObservable 的通知?

这可能是一个简单的问题,但我找不到正确的方法(我应该使用 not advised ISubject 吗?)。感谢您的帮助。

用这样的主题就可以了,保证实现的正确性。 这是一个使用 FSharp.Control.Reactive 的示例,它让您以惯用的方式编写此内容。

type MyClass() =
    inherit Legacy()
    let somethingObservable = 
        Subject.broadcast

    override _.OnSomething s = 
        somethingObservable |> Subject.onNext s |> ignore

    member _.AsObservable = 
        somethingObservable |> Observable.asObservable

您也可以使用 new Subject<_> 及其方法,同样的事情。 在某些程序集中,如果您不想接受 System.Reactive 依赖项,F# 还通过事件原生支持 IObservable

type MyClassEvt() =
    inherit Legacy()
    let event = new Event<_>()

    override _.OnSomething s = 
        event.Trigger s

    member _.AsObservable = 
        event.Publish :> IObservable<_>