重复:在 C# 中,如何在不丢失堆栈跟踪的情况下重新抛出 InnerException?
我有一些在后台线程上异步调用的操作。有时,事情会变糟。发生这种情况时,我往往会得到一个 TargetInvocationException,虽然合适,但它却毫无用处。我真正需要的是 TargetInvocationException 的 InnerException,如下所示:
try
{
ReturnValue = myFunctionCall.Invoke(Target, Parameters);
}
catch (TargetInvocationException err)
{
throw err.InnerException;
}
这样,我的调用者就会收到发生的 REAL 异常。问题是,throw 语句似乎重置了堆栈跟踪。我想基本上重新抛出内部异常,但保留它原来的堆栈跟踪。我怎么做?
澄清: 我只想要内部异常的原因是这个类试图“抽象掉”这些函数(由调用者提供的委托)在其他线程上运行的整个事实等等。如果有异常,那么很可能它与在后台线程上运行无关,调用者真的希望堆栈跟踪进入他们的委托并找到真正的问题,而不是我的调用调用。