我在异常处理和并行任务方面遇到了问题。
下面的代码启动了两个任务并等待它们完成。我的问题是,如果有一个任务抛出异常,则永远无法到达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
的文档描述我的第一次尝试是正确的。请帮助我理解为什么它不起作用。