Расширения параллельной библиотеки задач для .NET (которые станут частью .NET 4.0 ) следуют шаблону, предложенному в других ответах: сбор всех исключений, которые были брошены в AggregateException class.
Всегда выбрасывая один и тот же тип (независимо от того, есть ли одно исключение из дочерней работы или много), проще написать вызывающий код, который обрабатывает исключение.
В .NET 4.0 CTP, AggregateException
имеет открытый конструктор (который принимает IEnumerable<Exception>
); это может быть хорошим выбором для вашего приложения.
Если вы ориентируетесь на .NET 3.5, рассмотрите возможность клонирования частей класса System.Threading.AggregateException
, которые вам нужны, в вашем собственном коде, например, некоторых конструкторов и свойства InnerExceptions. (Вы можете поместить свой клон в пространство имен System.Threading
внутри вашей сборки, что может привести к путанице, если вы публично его представите, но позже упростит обновление до 4.0.) Когда выйдет .NET 4.0, вы сможете: обновить »до типа Framework, удалив исходный файл, содержащий ваш клон, из вашего проекта, изменив проект в соответствии с новой версией Framework и перестроив. Конечно, если вы сделаете это, вам нужно внимательно отслеживать изменения в этом классе, так как Microsoft выпускает новые CTP, чтобы ваш код не стал несовместимым. (Например, это кажется полезным классом общего назначения, и они могут переместить его с System.Threading
на System
.) В худшем случае вы можете просто переименовать тип и переместить его обратно в свое собственное пространство имен (это очень легко с большинством инструментов рефакторинга).