5
ObservableがObservable.Timer()
を使用して作成された場合、それをどのように停止しますか?どのようにObservable.Timer()を停止しますか?
停止する必要がありますか、またはすべてのサブスクライバが廃棄されたときにガベージコレクションされますか?
ObservableがObservable.Timer()
を使用して作成された場合、それをどのように停止しますか?どのようにObservable.Timer()を停止しますか?
停止する必要がありますか、またはすべてのサブスクライバが廃棄されたときにガベージコレクションされますか?
あなたがそれを購読するまで(「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つの考え方は、「タイマー」ではなく、「タイマー」です。
すべてのサブスクリプションが破棄され、「タイマーファクトリ」自体が値に固定されていない場合は、ガベージコレクションされますか? –
ありがとうございます。このような情報の参考資料はありますか? [Observable.Timerのドキュメント](https://msdn.microsoft.com/en-us/library/system.reactive.linq.observable.timer(v = v103).aspx)の情報が表示されない熱いまたは冷たい観察可能なもの。 –
@JohnReynolds:はい、もちろん、ガベージコレクションされます。他のオブジェクトと同じように。 –