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 については言及していません。私は何か間違ったことをしていますか?より完全なスタック トレースを取得する別のパターンはありますか?
編集:私の目標は、スタック トレースに依存するコードを記述することではなく、非同期メソッドのエラーをデバッグしやすくすることです。