[英]Exception tracking in Multi-Threaded C# using Tasks
我正在运行一种用于输入列表的方法; 该列表由用户提供。 如果在处理一个输入时发生异常,我必须将其从输出表中删除。 代码看起来像这样:
List<Task> methodsList = new List<Task>();
for (int i = 0; i < inputList.Count; i++)
{
int arg = i;
Task newTask = Task.Factory.StartNew(() => ProcessInput(i));
methodsList.Add(newTask);
}
if (methodsList.Count != 0)
{
try
{
Task.WaitAll(methodsList.ToArray());
}
catch (AggregateException ex)
{
foreach (Exception innerEx in ex.InnerExceptions)
{
throw innerEx;
}
}
}
问题是当我等待所有任务完成时, AggregatedException不会给我任何有关哪个线程失败的信息。 我当时正在考虑通过创建一个集合并将完成的过程的索引添加到该列表中,并在最后检查它以查看哪些输入未处理,以进行处理,但是我想知道是否有一种更简单的方法。
是的,有一种更简单的方法,可以在任务本身中处理异常。 当所有状态都消失时,试图处理它几乎是不可能的。 在任务中处理它仍然是一项艰巨的任务,但是至少您会更好地了解哪里出了问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.