使用任务在多线程C#中进行异常跟踪

Dev*_*nto 2 c# multithreading exception-handling task visual-studio-2010

我正在运行一个输入列表的方法; 该列表由用户提供.如果在处理一个输入时发生异常,我必须从输出表中删除它.代码看起来像这样:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我等待所有任务完成时,AggregatedException不会向我提供有关哪个线程失败的任何信息.我正在考虑通过创建一个集合并将完成的进程的索引添加到该列表并在最后检查它以查看哪些输入未处理,但我想知道是否有更简单的方法来处理它.

Han*_*ant 7

是的,有一种更简单的方法,在任务本身处理异常.当所有状态消失时,试图处理它几乎是不可能的.在任务中处理它仍然是一项艰巨的工作,但至少你会更好地了解哪里出了问题.