你如何停止Observable.Timer()?

时间:2016-08-21 21:06:26

标签: .net f# system.reactive

如果使用Observable.Timer()创建了一个Observable,你如何阻止它呢?

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

你甚至需要阻止它,还是在所有用户都被处理掉后会被垃圾收集?

1 个答案:

答案 0 :(得分:9)

在您订阅它之前,计时器甚至不会开始“触发”(您称之为“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对象的一种方法是作为“计时器工厂”,而不是“计时器”。

相关问题