¿Es posible obtener un buen seguimiento de pila con métodos asíncronos .NET?

Tengo la siguiente configuración de código de muestra en una aplicación 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!");
}

Tristemente, cuando GetValueAction es golpeado, el seguimiento de la pila que regresa es:

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

Por lo tanto, obtengo (destrozado) GetValue2 y GetValue en la traza, pero ninguna mención de GetValueAction. ¿Estoy haciendo algo mal? ¿Hay otro patrón que me proporcione más trazas de pila completas?

EDITAR: mi objetivo no es escribir el código que se basa en el seguimiento de la pila, sino hacer errores en los métodos asíncronos más fáciles de depurar.

Respuestas a la pregunta(3)

Su respuesta a la pregunta