2

什么是在 Reactive Rx中使用ScheduledDisposable的好案例/示例

我喜欢使用CompositeDisposableSerialDisposable,但你需要ScheduledDisposable吗?

4

1 回答 1

4

使用 Rx 一次性用品的逻辑是执行某种设置操作IDisposable的代码可以返回一个匿名包含将在稍后阶段进行相关清理的代码。如果始终使用此模式,那么您可以将许多一次性用品组合在一起以执行单个清理操作,而无需对正在清理的内容有任何具体的了解。

问题是,如果清理代码需要在某个线程上运行,那么您需要某种方式Dispose将一个线程上的调用编组到所需的线程 - 这就是ScheduledDisposable进来的地方。

主要示例是SubscribeOn扩展方法,它ScheduledDisposable用于确保“取消订阅”(即)Dispose与运行的相同。ISchedulerSubscribe

这对于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 回答