2

Reactive RxでScheduledDisposableを使用するための良いケース/例は何ですか?

CompositeDisposableSerialDisposableを使用するのが好きですが、 ScheduledDisposableが必要ですか。

4

1 に答える 1

4

Rxディスポーザブルを使用するロジックは、ある種のセットアップ操作を実行するIDisposableコードが、後の段階で関連するクリーンアップを実行するコードを匿名で含むコードを返すことができるということです。このパターンを一貫して使用すると、何をクリーンアップするかについての特定の知識がなくても、多数のディスポーザブルを組み合わせて1回のクリーンアップ操作を実行できます。

問題は、そのクリーンアップコードを特定のスレッドで実行する必要がある場合Dispose、1つのスレッドで呼び出されて、必要なスレッドにマーシャリングされる方法が必要になることですScheduledDisposable

主な例は、「購読解除」(つまり、)が実行されたのと同じで実行されるようにするためSubscribeOnに使用する拡張メソッドです。ScheduledDisposableDisposeISchedulerSubscribe

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

于 2011-09-29T00:40:19.990 に答える