Я хочу запускать каждую задачу 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
работает?