У меня есть класс построения отчетов, который использует параллельную обработку для создания примерно 800 отчетов.
До вчерашнего дня он работал нормально со следующим кодом:
Parallel.ForEach(reports, report => { this.Build(report); });
Примечание: в целях отладки я исключаю код из теста, написанного в тестовом проекте.
Вчера начался сбой. Небольшое копание с помощью Resource Monitor показало, что количество потоков, связанных с qtagent32.exe (исполнителем тестов), постоянно увеличивалось, что в конечном итоге приводило к сбою процесса. Похоже, что-то вдруг стало блокировать.
Мне удалось исправить проблему с небольшим изменением моего кода:
Parallel.ForEach(reports, new ParallelOptions { MaxDegreeOfParallelism = 4 }, report => { this.Build(report); });
Но мне все еще интересно, что изменилось?