使用任务的多线程C#中的异常跟踪

使用任务的多线程C#中的异常跟踪,c#,multithreading,visual-studio-2010,exception-handling,task,C#,Multithreading,Visual Studio 2010,Exception Handling,Task,我正在运行一个输入列表的方法;此列表由用户提供。如果在处理一个输入时发生异常,我必须将其从输出表中删除。代码如下所示: List<Task> methodsList = new List<Task>(); for (int i = 0; i < inputList.Count; i++) { int arg = i; Task newTask = Task.Factory.StartNew(() => ProcessInput(i));

我正在运行一个输入列表的方法;此列表由用户提供。如果在处理一个输入时发生异常,我必须将其从输出表中删除。代码如下所示:

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;
        }
    }
}
List方法列表=新列表();
for(int i=0;iProcessInput(i));
方法列表添加(newTask);
}
如果(methodsList.Count!=0)
{
尝试
{
Task.WaitAll(methodsList.ToArray());
}
捕获(聚合异常)
{
foreach(ex.InnerExceptions中的异常innerEx)
{
抛内裤;
}
}
}

问题是,当我等待所有任务完成时,AggregatedException不会给我任何关于哪个线程失败的信息。我想通过创建一个集合,将已完成流程的索引添加到该列表中,并在末尾检查以查看哪些输入未被处理,但我想知道是否有一种更简单的方法来处理它。

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

谢谢,我有一些在任务中这样做的想法,但它似乎有点混乱;但我想这是最好的办法。