Какой планировщик задач используется по умолчанию при запуске / запуске / вызове задач в. NET? - PullRequest
1 голос
/ 19 февраля 2020

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

Task.Factory.StartNew(A, CancellationToken.None, TaskCreationOptions.None, new MyTaskScheduler());

// ...

void A()
{
    // 1
    Parallel.Invoke(sometasks);

    // 2
    Task.Run(sometask);

    // 3
    Parallel.For(/*...*/);

    // 4
    // Any other task execution that isn't specifying a scheduler explicitly
}

Все ли примеры будут запланированы MyTaskScheduler? Я хочу использовать QueuedTaskScheduler ( From ParallelExtensionsExtras ) для обработки приоритетов и ограничений параллелизма для сложных запросов веб-API (которые могут запускать задачи и / или использовать другие функции TPL).

1 Ответ

1 голос
/ 19 февраля 2020

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

Вы обнаружите, что большинство методов будут принимать options , у которых будет планировщик задач свойство или вы можете указать его в самом методе как при перегрузке

...