У меня есть следующая настройка кода кода в приложении WebApi:
[HttpGet]
public double GetValueAction()
{
return this.GetValue().Result;
}
public async Task<double> GetValue()
{
return await this.GetValue2().ConfigureAwait(false);
}
public async Task<double> GetValue2()
{
throw new InvalidOperationException("Couldn't get value!");
}
К сожалению, когда GetValueAction попадает, возвращается трассировка стека:
" at MyProject.Controllers.ValuesController.<GetValue2>d__3.MoveNext() in c:\dev\MyProject\MyProject\Controllers\ValuesController.cs:line 61 --- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at MyProject.Controllers.ValuesController.<GetValue>d__0.MoveNext() in c:\dev\MyProject\MyProject\Controllers\ValuesController.cs:line 56"
Таким образом, я получаю (искаженные) GetValue2 и GetValue в трассировке, но не упоминает GetValueAction. Я делаю что-то неправильно? Есть ли еще один шаблон, который даст мне более полные следы стека?
EDIT: моя цель - не писать код, основанный на трассировке стека, а вместо этого облегчать отладку отказов в асинхронных методах.