Reactive RxでScheduledDisposableを使用するための良いケース/例は何ですか?
CompositeDisposableとSerialDisposableを使用するのが好きですが、 ScheduledDisposableが必要ですか。
Reactive RxでScheduledDisposableを使用するための良いケース/例は何ですか?
CompositeDisposableとSerialDisposableを使用するのが好きですが、 ScheduledDisposableが必要ですか。
Rxディスポーザブルを使用するロジックは、ある種のセットアップ操作を実行するIDisposable
コードが、後の段階で関連するクリーンアップを実行するコードを匿名で含むコードを返すことができるということです。このパターンを一貫して使用すると、何をクリーンアップするかについての特定の知識がなくても、多数のディスポーザブルを組み合わせて1回のクリーンアップ操作を実行できます。
問題は、そのクリーンアップコードを特定のスレッドで実行する必要がある場合Dispose
、1つのスレッドで呼び出されて、必要なスレッドにマーシャリングされる方法が必要になることですScheduledDisposable
。
主な例は、「購読解除」(つまり、)が実行されたのと同じで実行されるようにするためSubscribeOn
に使用する拡張メソッドです。ScheduledDisposable
Dispose
IScheduler
Subscribe
FromEventPattern
これは、たとえば、UIスレッドで発生する必要のあるイベントハンドラーにアタッチしたり、イベントハンドラーからデタッチしたりする拡張メソッドにとって重要です。
ScheduledDisposable
直接使用できる場所の例を次に示します。
var frm = new SomeForm();
frm.Text = "Operation Started.";
var sd = new ScheduledDisposable(
new ControlScheduler(frm),
Disposable.Create(() =>
frm.Text = "Operation Completed."));
Scheduler.ThreadPool.Schedule(() =>
{
// Long-running task
Thread.Sleep(2000);
sd.Dispose();
});
少し工夫が凝らされていますが、使用方法の合理的な例を示しているはずですScheduledDisposable
。