Rx订阅和垃圾收集

Joh*_*lds 4 .net f# system.reactive

您是否需要将返回的IDisposable分配给IObservable.Subscribe变量以保护订阅不被垃圾回收,或者是否存在足够的活动订阅?

我的用例:我从现有的observable(myObservable在示例中)中创建一次性observable :

myObservable.Take(1).Subscribe(fun v -> printfn "One-shot: %A" v) |> ignore
Run Code Online (Sandbox Code Playgroud)

Fyo*_*kin 5

是的,有效订阅的存在就足够了.GC预防的订阅引用链最终始于第一个observable的源头,因此当流源处于活动状态时,您的订阅也是活动的.如果收集了流源本身,那么您的订阅将会随之消失,但这没关系,因为无论如何都不会再次调用它.

另一方面,一旦您的订阅收到一个脉冲,.Take(1)实施将断开它与源的连接,允许它被收集.