Czy możliwe jest uzyskanie dobrego śledzenia stosu za pomocą metod asynchronicznych .NET?

Mam następującą przykładową konfigurację kodu w aplikacji 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!");
}

Niestety, gdy GetValueAction zostanie trafiony, ślad stosu, który powraca, to:

    " 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"

W ten sposób otrzymuję (zniekształcone) GetValue2 i GetValue w śladzie, ale bez wzmianki o GetValueAction. czy robię coś źle? Czy istnieje inny wzór, który pozwoli mi uzyskać pełniejsze ślady stosu?

EDYTUJ: moim celem nie jest pisanie kodu opartego na śledzeniu stosu, ale raczej ułatwi debugowanie błędów w metodach asynchronicznych.

questionAnswers(3)

yourAnswerToTheQuestion