Подтвердить что ты не робот

Каковы планировщики по умолчанию для каждого наблюдаемого оператора?

На этой странице в MSDN указано, что

Если вы не используете перегрузку, которая принимает планировщик в качестве аргумента, Rx будет выбирать планировщик по умолчанию, используя принцип наименьшего concurrency. Это означает, что выбран планировщик, который вводит наименьшее количество concurrency, удовлетворяющее потребностям оператора. Например, для операторов, возвращающих наблюдаемое с конечным и небольшим количеством сообщений, Rx вызывает Immediate. Для операторов, возвращающих потенциально большое или бесконечное количество сообщений, вызывается CurrentThread. Для операторов, использующих таймеры, используется ThreadPool.

Мне бы хотелось иметь справочный лист, для которого наблюдаемые операторы используют этот планировщик по умолчанию, но я нигде не могу его найти. Каковы планировщики по умолчанию для каждого наблюдаемого оператора?

4b9b3361

Ответ 1

Ничего себе, это не было тривиально найти...

В глубине внутри пространства имен 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