【问题标题】:Exception tracking in Multi-Threaded C# using Tasks使用任务的多线程 C# 中的异常跟踪
【发布时间】:2023-03-23 04:06:01
【问题描述】:

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

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 并没有给我任何关于哪个线程失败的信息。我正在考虑通过创建一个集合并将已完成进程的索引添加到该列表并在最后检查它以查看哪些输入未处理来处理此问题,但我想知道是否有更简单的方法。

【问题讨论】:

    标签: c# multithreading visual-studio-2010 exception-handling task


    【解决方案1】:

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

    【讨论】:

    • 谢谢,在任务中我有一些想法,但是看起来有点乱;但我想这是最好的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 2017-08-06
    • 2015-12-28
    • 1970-01-01
    相关资源
    最近更新 更多