Приложение, над которым я работаю, использует пул потоков. Вот основной псевдокод.
На основной теме
foreach(Object obj in Component.GetObject())
{
//Invoke the thread pool providing the call back (method to be called on the background// thread) and pass the object as the parameter.
}
//Wait for the threads to complete.
"Component.GetObject" будет в основном возвращать объект CLR с использованием возврата Yield. Этот объект должен обрабатываться двумя другими компонентами в потоках. Итак, мы вызываем пул потоков, предоставляющий метод обратного вызова (который вызовет два компонента).
Если есть исключение в порожденном потоке / с, родительский поток должен быть уведомлен, чтобы он мог выйти из цикла for (то есть прекратить порождение большего количества потоков), дождаться завершения созданных потоков и затем обработать исключение.
Основываясь на моем чтении, один из подходов будет иметь переменную "flag" в главном потоке. Если есть исключение в порожденном потоке, поток установил бы переменную, используя механизм блокировки. Родительский поток будет проверять переменную flag до появления новых потоков.
Я хотел бы знать, есть ли лучший подход для обработки этого сценария. Пул потоков используется, так как он управляет постановкой в очередь потоков, если цикл «for» порождает больше потоков, чем предел пула потоков.