自定义异常作为聚合异常抛出

本文关键字:异常 自定义异常 | 更新日期: 2023-09-27 18:17:13

从Task.Run(…)抛出自定义异常时。结果,catch块找到AggregateException而不是CustomException。为什么?

   public MainPage()
    {
        this.InitializeComponent();
        CallAMethod();
    }
    static bool AMethod()
    {
        return Task.Run(() =>
        {
            throw new CustomException();
            return false;
        }).Result;
    }
    static bool CallAMethod()
    {
        try
        {
            return AMethod();
        }
        catch (CustomException e)
        {
            //not caught
            throw;
        }
        catch (Exception ex)
        {
            //caught?
            throw;
        }
    }

下面是自定义Exception类

class CustomException : Exception
{
}

自定义异常作为聚合异常抛出

from @colinsmith

"当您使用Task. wait()或Task. wait()时。结果出现错误的任务,导致任务出现错误的异常会被传播,但它不会被直接抛出……相反,它被包装在AggregateException对象中,然后被抛出。…你可以访问其中的CustomException

参见:处理AggregateExceptions的扁平化