在多线程和进程程序中捕获异常

Catch exceptions in multi threads and processes program

我正在尝试捕捉一些特定的异常。问题是我的程序很复杂,可以将此异常隐藏为 'primary' 异常或聚合异常中的内部异常。 (它也可以是内部异常的内部等等) 我如何以优雅的方式捕捉到它? 到目前为止我做了什么

            catch (Exception e) when (e.InnerException is MyOwnSpecialErrorException)
            {
                var e1 = e.InnerException as MyOwnSpecialErrorException;
                success = false;
                exception = e1;
            }

还有:

        catch (MyOwnSpecialErrorException e) 
        {
            success = false;
            exception = e;
        }

当然这里我只关注一个嵌套内部异常的情况,而且这里假设它是第一个内部异常。有人能想出办法吗?

这是我能想到的更简洁的语法,具有 is 运算符:

bool success;
MyOwnSpecialErrorException exception;
try
{
    //...
}
catch (AggregateException aex)
    when (aex.Flatten().InnerExceptions.OfType<MyOwnSpecialErrorException>()
        .FirstOrDefault() is MyOwnSpecialErrorException myEx)
{
    success = false; exception = myEx;
}
catch (MyOwnSpecialErrorException ex)
{
    success = false; exception = ex;
}
catch
{
    success = true; // Ignore all other exceptions
}