К сожалению, из-за того, что TPL хранит исключения до завершения выполнения задачи, исходная трассировка стека теряется.Запуск вашего примера кода в LINQPad показывает, что исключение было выдано на at System.Threading.Tasks.Task.Execute()
, что, очевидно, не правильно.
В качестве грубого обходного пути вы могли бы сохранить исходную трассировку стекапростая строка) в свойстве Data
исходного исключения, и вы сможете получить к нему доступ:
private static void TaskMethod()
{
try
{
throw new Exception("Todo");
}
catch (Exception ex)
{
ex.Data["OriginalStackTrace"] = ex.StackTrace;
throw;
}
}
Тогда исходная трассировка стека будет храниться в OriginalStackTrace
значение словаря Data
:
Это не совсем то, что вы хотите, но я надеюсь, что это поможет.