Вызовите каждую задачу в отдельном потоке.Планировщик заданий ThreadPerTaskScheduler - PullRequest
0 голосов
/ 29 сентября 2019

Я хочу запускать каждую задачу TPL в отдельном thread (идея заключается в том, чтобы одновременно иметь преимущества TPL при работе с отдельными потоками).Похоже, что task scheduler это именно то, что я ищу: ThreadPerTaskScheduler .

Я провел несколько локальных тестов, и я вижу, что это работает, как я ожидал, включая возможность вызова Task.WaitAll.

var task = Task.Factory.StartNew(() =>
{
    Thread.Sleep(10000);
}, CancellationToken.None, TaskCreationOptions.None, new ThreadPerTaskScheduler());
Task.WaitAll(task);

Но у меня есть вопрос об этой строке из реализации планировщика задач:

protected override void QueueTask(Task task) 
{ 
    new Thread(() => TryExecuteTask(task)) { IsBackground = true }.Start(); 
} 

как я вижу, мы просто создаем новый поток без сохранения какой-либо ссылкив этой теме где угодно.Если да, то как Task.WaitAll работает?

...