System.Reactive 在 Scheduler.Default 和 TaskPoolScheduler.Default 之间选择

System.Reactive choosing between Scheduler.Default and TaskPoolScheduler.Default

我很难在 Scheduler.DefaultTaskPoolScheduler.Default 之间做出选择。

我看到它建议 TaskPoolScheduler 更多 efficient/optimised 并且它当然有更多 explicit/specific 的好处;然而,这并不能帮助我理解真正的区别,因为在功能上它们似乎做同样的事情。

什么时候 Scheduler.Default 优于 TaskPoolScheduler.Default,反之亦然?

Scheduler.Default 等同于 DefaultScheduler.Instance.

DefaultScheduler 如何处理 thunk? DefaultScheduler 位于平台抽象层之上,该层根据其所在的系统来安排工作。

这曾经是 System.Reactive.PlatformServices.dll 程序集,它会根据平台的不同而有所不同,但对于 4.x 它只是一个空的外观程序集以保持与 3.x 的兼容性,与实施移至 System.Reactive.dll

对于默认调度程序:

  • 截至目前,为了安排即时工作,使用 ThreadPool
  • 对于周期性事件 (SchedulePeriodic),使用 System.Threading.Timer
  • 对于运行速度尽可能快的工作,使用新线程。

选择什么平台服务的详细信息在EnlightenmentProvider

当您有长运行 计算或时间跨度非常小或为零的周期性事件时,您可以使用DefaultScheduler,尽管EventLoopScheduler 可能更好。

尽可能选择 TaskPoolScheduler。它是一种用于短计算的轻量级实现。