Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: AlexFoxGillОтветов: 1

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

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

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

  • Я на самом деле удивлен, что где-то нет списка ... если у меня будет время, чтобы погрузиться в него, я пройдусь по кодовой базе rx и посмотрю, смогу ли я скомпилировать список, но нет, я не знаю любых плавающих вокруг сетей ... JerKimball 13.03.2013
  • Да я тоже рыскал, безрезультатно. Некоторые из них очевидны, но некоторые на самом деле нет! AlexFoxGill 13.03.2013

Ответы

Ответ 1 · рейтинг 71 · JerKimball

Ого, найти было не просто...

Глубоко в недрах пространства имен 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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы