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

Syn*_*tax 3 system.reactive .net-core

我在Scheduler.Default和之间做出选择非常困难TaskPoolScheduler.Default

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

什么时候Scheduler.Default更可取TaskPoolScheduler.Default,反之亦然?

Ast*_*sti 5

Scheduler.Default是相同的DefaultScheduler.Instance

手柄怎么发出DefaultScheduler响声?DefaultScheduler位于平台抽象层之上,该层根据其所在的系统来安排工作。

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

对于默认调度程序:

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

选择哪个平台服务的详细信息在 EnlightenmentProvider

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

TaskPoolScheduler尽可能优先选择。它是一个轻量级的实现,旨在进行短计算。