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



我试图捕捉一些特定的异常。问题是我的程序很复杂,可以将此异常隐藏为"主要"异常或作为聚合异常中的内部异常。(也可以是内部异常的内部异常等等)我如何以一种优雅的方式捕捉到它?到目前为止我所做的

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
}

最新更新