var moduleTimeOut = 3000;
var errorsThatOccurred = new List<string>();
List<string> names = new List<string>() { "Task1", "Task2", "Task3" };
var tasks = new List<Task<string>>();
names.ForEach( name => tasks.Add( Task<string>.Factory.StartNew((m) => MyTask(m.ToString()), name)));
try
{
var allTasksCompletedInTime = Task.WaitAll(tasks.ToArray(), moduleTimeOut);
}
catch (AggregateException ex)
{
foreach (var exception in ex)
{
errorsThatOccurred.Add(exception.ToString());
}
}
private string MyTask(string name)
{
if (name.Equals("Task1"))
System.Threading.Thread.Sleep(5000);
if (name.Equals("Task2"))
throw new ArgumentException("Task2 has thrown an exception");
return "MyTask has finished the execution. Task is " + name;
}
我在捕获 AggregateException 时遇到了一些问题。这是我的不同场景。
所有任务都按时完成。→ 工作正常。
Task2 抛出错误,所有其他任务都及时完成。→ 捕获 AggregateException 并可以看到 Task2 抛出的 ArgumentException。
Task1 没有及时完成并且仍在运行。Task2 抛出错误。任务 3 完成。→ AggregateException 没有触发。我在 Exception 属性中看到 Task2 状态为故障和异常信息。
我不知道为什么它没有在场景 #3 中抛出 AggregateException。有什么帮助吗?