У нас есть цикл .ForEach
(TPL), который запускает много, много, много задач.Поскольку TPL потребляет потоки из пула потоков, мне интересно, что произойдет, если больше нет доступных потоков?Будет ли вызывающий код блокироваться до тех пор, пока потоки не станут снова доступными?
Я знаю, что в пуле потоков есть глобальная рабочая очередь, в которой рабочие элементы (Task
) будут поставлены в очередь.Может ли эта очередь быть когда-либо заполненной?
Наша проблема в том, что некоторые задачи выполняются долго (30 минут), а некоторые - короткие (секунда), но у нас есть тысячи таких задач, если не больше.TPL запускает новый поток для каждой задачи, которую я запускаю?Думаю, нет.В какой момент пул потоков будет исчерпан?