在多线程和进程程序中捕获异常
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
}
我正在尝试捕捉一些特定的异常。问题是我的程序很复杂,可以将此异常隐藏为 '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
}