Joh*_*lds 6 .net f# system.reactive
如果使用Observable创建Observable.Timer(),你如何阻止它?
let tmr = Observable.Timer(TimeSpan.Zero, TimeSpan.FromMilliseconds 1000.)
let subscription = tmr.Subscribe(myFunction)
// ...
subscription.Dispose()
Run Code Online (Sandbox Code Playgroud)
你是否甚至需要阻止它,或者当它的所有用户都被处理掉后它会被垃圾收集?
在您订阅它之前,计时器甚至不会开始"触发"(您称之为" 冷可观察 ").而且:它会像订阅它一样多次开始射击.试试这个:
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")
Run Code Online (Sandbox Code Playgroud)
该程序将打印A: 1,然后B: 1,然后A: 2,然后B: 2,等-大约每500毫秒.
因此,一旦订阅被处理,计时器就会停止"触发".但只有那个特定的计时器,而不是所有的计时器.
考虑tmr对象的一种方法是作为"计时器工厂",而不是"计时器".