Ist es möglich, mit asynchronen .NET-Methoden einen guten Stack-Trace zu erhalten?

Ich habe das folgende Beispielcode-Setup in einer WebApi-Anwendung:

[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!");
}

Leider ist der Stack-Trace, der zurückkommt, wenn GetValueAction getroffen wird:

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

Somit bekomme ich (entstellt) GetValue2 und GetValue im Trace, aber keine Erwähnung von GetValueAction. Mache ich etwas falsch? Gibt es ein anderes Muster, das mir vollständigere Stapelspuren verleiht?

BEARBEITEN: Mein Ziel ist es nicht, Code auf der Grundlage des Stack-Trace zu schreiben, sondern Fehler in asynchronen Methoden einfacher zu debuggen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage