Task.WaitAll и исключения

У меня проблема с обработкой исключений и параллельными задачами.

Код, показанный ниже, запускает 2 задачи и ожидает их завершения. Моя проблема в том, что в случае, если задача вызывает исключение, обработчик catch никогда не достигается.

        List<Task> tasks = new List<Task>();
        try
        {                
            tasks.Add(Task.Factory.StartNew(TaskMethod1));
            tasks.Add(Task.Factory.StartNew(TaskMethod2));

            var arr = tasks.ToArray();                
            Task.WaitAll(arr);
        }
        catch (AggregateException e)
        {
            // do something
        }

Однако, когда я использую следующий код для ожидания задач с тайм-аутом, исключение перехватывается.

 while(!Task.WaitAll(arr,100));

Кажется, я что-то упускаю, поскольку документация для WaitAll описывает мою первую попытку как правильную. Пожалуйста, помогите мне понять, почему это не работает.

28
задан thumbmunkeys 18 November 2010 в 17:18
поделиться