C# 多线程异常处理

1、分析

不能直接用tray-catch处理,需要线程等待(WaitAll),才能捕获到异常

2、异常

多线程异常类:AggregateException

打印异常

foreach (var item in ex.InnerExceptions)
{
    Console.WriteLine(item.Message);
}

3、案例

try
{
    List<Task> tasks = new List<Task>();
    for (int i = 0; i < 20; i++)
    {
        string k = $"Task{i}";
        Task task = Task.Run(() => {
            if (k.Equals("Task3"))
            {
                throw new Exception("Task3");
            }
            else if (k.Equals("Task5"))
            {
                throw new Exception("Task5");
            }
            else if (k.Equals("Task7"))
            {
                throw new Exception("Task7");
            }
        });
        tasks.Add(task);
    }
    // 线程等待
    Task.WaitAll(tasks.ToArray());
}
catch (AggregateException ex)
{
    Console.WriteLine(ex.Message);
    foreach (var item in ex.InnerExceptions)
    {
        Console.WriteLine(item.Message);
    }
}

 

posted @ 2025-07-05 19:48  市丸银  阅读(21)  评论(0)    收藏  举报