为了监控我的 dotnet 核心应用程序,我使用 .NET clr profiling api 来获取方法级别的跟踪并计算任何方法完成其执行所花费的时间。我无法获得异步方法所花费的时间。
public ActionResult<IEnumerable<string>> Get()
{
Ok(RunQueryAsync().Result);
return new string[] { "value1", "value2" };
}
public async Task<String> RunQueryAsync()
{
// in the PostDataAsyncWithHeader I'm making async api request using HttpClient
await PostDataAsyncWithHeader();
}
catch (Exception ex)
{
//display error message
return "Exception: " + ex.Message;
}
}
在上面的代码中,我从 PostDataAsyncWithHeader() 方法发出 api 请求,这几乎需要 5 秒才能完成。但是当我使用 clr 分析 Enter 和 exit 挂钩来计算时间时,Get() 方法显示大约 5 秒,但 RunQueryAsync() 和 PostDataAsyncWithHeader() 方法显示 0ms。但实际时间由 PostDataAsyncWithHeader() 方法占用。
我想找到 PostDataAsyncWithHeader() 方法所花费的确切时间。请建议我如何实现它。