19 Stimmen

Wie kann ich eine innere Exception erneut auslösen und dabei den bisher erzeugten Stacktrace beibehalten?

Duplikat von: In C#, wie kann ich rethrow InnerException ohne Stack-Trace zu verlieren?

Ich habe einige Vorgänge, die ich asynchron auf einem Hintergrund-Thread aufrufe. Manchmal gehen die Dinge schief. Wenn dies geschieht, neige ich dazu, eine TargetInvocationException zu erhalten, die zwar angemessen, aber ziemlich nutzlos ist. Was ich wirklich brauche, ist die TargetInvocationException's InnerException, wie diese:

    try
    {
        ReturnValue = myFunctionCall.Invoke(Target, Parameters);
    }
    catch (TargetInvocationException err)
    {
        throw err.InnerException;
    }

Auf diese Weise werden meine Anrufer mit der ECHTEN Ausnahme, die aufgetreten ist, bedient. Das Problem ist, dass die throw-Anweisung scheint die Stack-Trace zurückzusetzen. Ich möchte im Grunde neu werfen die innere Ausnahme, aber halten Sie die Stack-Trace es ursprünglich hatte. Wie kann ich das tun?

KLÄRUNG: Der Grund, warum ich nur die innere Ausnahme möchte, ist, dass diese Klasse versucht, die ganze Tatsache zu "abstrahieren", dass diese Funktionen (Delegaten, die vom Aufrufer bereitgestellt werden) auf anderen Threads und so weiter ausgeführt werden. Wenn es eine Ausnahme gibt, dann stehen die Chancen gut, dass sie nichts damit zu tun hat, dass sie auf einem Hintergrund-Thread ausgeführt wird, und der Aufrufer möchte wirklich die Stack-Trace, die in ihren Delegaten geht und das wirkliche Problem findet, nicht meinen Aufruf zum Aufrufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X