什么是在 Reactive Rx中使用ScheduledDisposable的好案例/示例
我喜欢使用CompositeDisposable和SerialDisposable,但你需要ScheduledDisposable吗?
什么是在 Reactive Rx中使用ScheduledDisposable的好案例/示例
我喜欢使用CompositeDisposable和SerialDisposable,但你需要ScheduledDisposable吗?
使用 Rx 一次性用品的逻辑是执行某种设置操作IDisposable
的代码可以返回一个匿名包含将在稍后阶段进行相关清理的代码。如果始终使用此模式,那么您可以将许多一次性用品组合在一起以执行单个清理操作,而无需对正在清理的内容有任何具体的了解。
问题是,如果清理代码需要在某个线程上运行,那么您需要某种方式Dispose
将一个线程上的调用编组到所需的线程 - 这就是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
.