如果 Observable 是使用 Observable.Timer() 创建的,你如何停止它?

let tmr = Observable.Timer(TimeSpan.Zero, TimeSpan.FromMilliseconds 1000.)
let subscription = tmr.Subscribe(myFunction)
// ...
subscription.Dispose()

你甚至需要停止它,还是在它的所有订阅者都被处理后它会被垃圾收集?

最佳答案

在您订阅它之前,计时器甚至不会开始“触发”(您称之为“cold observable”)。此外:它会根据订阅的次数开始触发。试试这个:

let tmr = Observable.Timer(TimeSpan.Zero, TimeSpan.FromMilliseconds 1000.)
let subscription = tmr.Subscribe(printfn "A: %d")
Thread.Sleep 500
let subscription2 = tmr.Subscribe(printfn "B: %d")
该程序将打印 A: 1 ,然后是 B: 1 ,然后是 A: 2 ,然后是 B: 2 ,依此类推——大约每 500 毫秒一次。
因此,一旦订阅被处理,计时器就会停止“触发”。但只有那个特定的计时器,而不是全部。
考虑 tmr 对象的一种方法是将其视为“计时器工厂”,而不是“计时器”。

关于.net - 你如何停止 Observable.Timer()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39068867/

10-16 23:08