重複:C#で、スタックトレースを失うことなくInnerExceptionを再スローするにはどうすればよいですか?
バックグラウンドスレッドで非同期的に呼び出す操作がいくつかあります。時々、物事は悪くなります。これが発生すると、TargetInvocationExceptionが発生する傾向がありますが、これは適切ではありますが、まったく役に立ちません。私が本当に必要としているのは、次のようなTargetInvocationExceptionのInnerExceptionです。
try
{
ReturnValue = myFunctionCall.Invoke(Target, Parameters);
}
catch (TargetInvocationException err)
{
throw err.InnerException;
}
そうすれば、発生したREAL例外が発信者に提供されます。問題は、throwステートメントがスタックトレースをリセットしているように見えることです。基本的に内部例外を再スローしたいのですが、元々持っていたスタックトレースを保持します。それ、どうやったら出来るの?
明確化: 内部例外のみが必要な理由は、このクラスが、これらの関数(呼び出し元によって提供されたデリゲート)が他のスレッドなどで実行されているという事実全体を「抽象化」しようとするためです。例外がある場合、それはバックグラウンドスレッドで実行されることとは何の関係もない可能性があり、呼び出し元は、呼び出しの呼び出しではなく、デリゲートに入り、実際の問題を見つけるスタックトレースを本当に望んでいます。