【发布时间】:2020-03-11 02:45:09
【问题描述】:
我很难在 Scheduler.Default 和 TaskPoolScheduler.Default 之间进行选择。
我看到它表明 TaskPoolScheduler 更高效/优化,而且它当然具有更明确/更具体的好处;但是,这并不能帮助我理解真正的区别,因为它们在功能上似乎做同样的事情。
Scheduler.Default 何时优于 TaskPoolScheduler.Default,反之亦然?
【问题讨论】:
我很难在 Scheduler.Default 和 TaskPoolScheduler.Default 之间进行选择。
我看到它表明 TaskPoolScheduler 更高效/优化,而且它当然具有更明确/更具体的好处;但是,这并不能帮助我理解真正的区别,因为它们在功能上似乎做同样的事情。
Scheduler.Default 何时优于 TaskPoolScheduler.Default,反之亦然?
【问题讨论】:
Scheduler.Default 与DefaultScheduler.Instance 相同。
DefaultScheduler 如何处理 thunk? DefaultScheduler 位于平台抽象层之上,该层根据其所在的系统安排工作。
这曾经是 System.Reactive.PlatformServices.dll 程序集,根据平台的不同会有所不同,但对于 4.x,它只是一个空的外观程序集,以保持与 3.x 的兼容性,实现已移至 System.Reactive.dll。
对于 DefaultScheduler:
ThreadPool。SchedulePeriodic),使用 System.Threading.Timer。选择什么平台服务的详细信息在EnlightenmentProvider中。
当您有长时间运行的计算或 TimeSpan 非常小或为零的周期性事件时,您可以使用DefaultScheduler,尽管EventLoopScheduler 可能更好。
如果可能,首选TaskPoolScheduler。这是一个用于短计算的轻量级实现。
【讨论】: