2016-08-21 6 views

答えて

8

あなたがそれを購読するまで(「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") 

このプログラムはB: 2その後、A: 2その後、B: 1そして、A: 1を印刷し、その上になる - およそ500ミリ秒毎。

したがって、タイマーは、サブスクリプションが破棄されるとすぐに「起動」を停止します。しかし、その特定のタイマーだけではなく、それらのすべて。

tmrオブジェクトの1つの考え方は、「タイマー」ではなく、「タイマー」です。

+0

すべてのサブスクリプションが破棄され、「タイマーファクトリ」自体が値に固定されていない場合は、ガベージコレクションされますか? –

+0

ありがとうございます。このような情報の参考資料はありますか? [Observable.Timerのドキュメント](https://msdn.microsoft.com/en-us/library/system.reactive.linq.observable.timer(v = v103).aspx)の情報が表示されない熱いまたは冷たい観察可能なもの。 –

+3

@JohnReynolds:はい、もちろん、ガベージコレクションされます。他のオブジェクトと同じように。 –