已安排一次性



在反应式 Rx 中使用 ScheduledDisposable 的好案例/示例是什么

我喜欢使用复合一次性和串行一次性,但你需要计划一次性。

使用 Rx 一次性文件的逻辑是,执行某种设置操作的代码可以返回一个匿名包含将在稍后阶段执行相关清理的代码的IDisposable。如果始终使用此模式,则可以将许多一次性对象组合在一起以执行单个清理操作,而无需对正在清理的内容有任何特定知识。

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

主要的例子是SubscribeOn扩展方法,该方法使用ScheduledDisposable来确保"取消订阅"(即Dispose(在运行Subscribe的同一IScheduler上运行。

这对于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的合理示例。

相关内容

  • 没有找到相关文章

最新更新