你如何停止 Observable.Timer()?
How do you stop an Observable.Timer()?
如果 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
对象的一种方式是将其视为“计时器工厂”,而不是“计时器”本身。
如果 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
对象的一种方式是将其视为“计时器工厂”,而不是“计时器”本身。