每个可观察操作符的默认调度器是什么?

本文关键字:调度 是什么 默认 观察 操作符 | 更新日期: 2023-09-27 18:03:16

MSDN上的这个页面说明

如果不使用以调度程序为参数的重载,Rx将使用最小并发性原则选择默认调度程序。这意味着将选择引入最少量并发性的调度器,以满足操作符的需要。例如,对于返回具有有限数量消息的可观察对象的操作符,Rx调用Immediate。对于可能返回大量或无限数量消息的操作符,调用CurrentThread。对于使用计时器的操作符,使用ThreadPool。

我想实际上有一个参考表,可观察操作符使用哪个默认调度器,但我找不到一个。每个可观察操作符的默认调度程序是什么?

每个可观察操作符的默认调度器是什么?

哇,这可不容易找到…

System.Reactive.Concurrency命名空间的深处,有一个名为SchedulerDefaults的内部静态类,声明为:

internal static class SchedulerDefaults
{
    internal static IScheduler AsyncConversions 
    { get { return DefaultScheduler.Instance; }}
    internal static IScheduler ConstantTimeOperations 
    { get { return ImmediateScheduler.Instance; }}
    internal static IScheduler Iteration 
    { get { return CurrentThreadScheduler.Instance; }}
    internal static IScheduler TailRecursion 
    { get { return ImmediateScheduler.Instance; }}
    internal static IScheduler TimeBasedOperations 
    { get { return DefaultScheduler.Instance; }}
}

AsyncConversions被使用:

Start, ToAsync, FromAsyncPattern

ConstantTimeOperations被使用:

Empty, GetSchedulerForCurrentContext, Return, StartWith, Throw

Iteration被使用:

Generate, Range, Repeat, TakeLast, ToObservable, and the ReplaySubject<T>

TailRecursion被使用:

Run

TimeBasedOperations被使用:

Buffer, Delay, DelaySubscription, Generate, Interval, Sample, Skip, SkipLast
SkipUntil, Take, TakeLast, TakeLastBuffer, TakeUntil, Throttle, TimeInterval,
Timeout, Timer, Timestamp, Window