Дубликат: В С#, как я могу перекрыть InnerException без потери трассировки стека?
У меня есть некоторые операции, которые я вызываю асинхронно в фоновом потоке. Иногда все идет плохо. Когда это происходит, я, как правило, получаю TargetInvocationException, которое, при необходимости, совершенно бесполезно. Я действительно нуждаюсь в TargetInvocationException InnerException, например:
try
{
ReturnValue = myFunctionCall.Invoke(Target, Parameters);
}
catch (TargetInvocationException err)
{
throw err.InnerException;
}
Таким образом, мои абоненты обслуживаются с исключением REAL, которое произошло. Проблема заключается в том, что выражение throw выглядит как reset трассировка стека. Я бы хотел, в основном, восстановить внутреннее исключение, но сохранить трассировку стека изначально. Как это сделать?
УТОЧНЕНИЕ: Причина, по которой я хочу только внутреннее исключение, заключается в том, что этот класс пытается "абстрагировать" весь факт, что эти функции (делегаты, предоставленные вызывающим) выполняются на других потоках и еще много чего. Если есть исключение, то вероятность того, что это не имеет никакого отношения к запуску в фоновом потоке, и вызывающему пользователю действительно понравится трассировка стека, которая входит в их делегат, и находит реальную проблему, а не мой вызов для вызова.