É possível obter um bom rastreamento de pilha com os métodos assíncronos do .NET?

Eu tenho a seguinte configuração de código de exemplo em um aplicativo 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!");
}

Infelizmente, quando GetValueAction é atingido, o rastreamento de pilha que retorna é:

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

Assim, recebo (mutilado) GetValue2 e GetValue no rastreamento, mas nenhuma menção de GetValueAction. Estou fazendo algo errado? Existe outro padrão que me trará traços de pilha mais completos?

EDIT: meu objetivo não é escrever código baseando-se no rastreamento de pilha, mas sim fazer com que as falhas nos métodos assíncronos sejam mais fáceis de depurar.

questionAnswers(3)

yourAnswerToTheQuestion