在反应式 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
的合理示例。