【问题标题】:System.Reactive choosing between Scheduler.Default and TaskPoolScheduler.DefaultSystem.Reactive 在 Scheduler.Default 和 TaskPoolScheduler.Default 之间进行选择
【发布时间】:2020-03-11 02:45:09
【问题描述】:

我很难在 Scheduler.DefaultTaskPoolScheduler.Default 之间进行选择。

我看到它表明 TaskPoolScheduler 更高效/优化,而且它当然具有更明确/更具体的好处;但是,这并不能帮助我理解真正的区别,因为它们在功能上似乎做同样的事情。

Scheduler.Default 何时优于 TaskPoolScheduler.Default,反之亦然?

【问题讨论】:

    标签: .net-core system.reactive


    【解决方案1】:

    Scheduler.DefaultDefaultScheduler.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。这是一个用于短计算的轻量级实现。

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 2010-12-06
      • 2012-04-13
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      相关资源
      最近更新 更多