c# - Application Insights Profiler 和 "AWAIT_TIME"

标签 c# azure asynchronous profiling azure-application-insights

这里到底发生了什么?实际调用需要 8000 毫秒,但实际 DB 调用仅需要 <100 毫秒。这是负载测试的结果,在 Azure 中的 Web 应用程序上峰值约为 100 req/s。我尝试了横向扩展和向上扩展,但性能仍然相同。该调用是异步完成的,在早期,分析器对于此类请求不是很准确,但现在已经是 2017 年了……

那么,谁能告诉我它在哪里或者在等待什么?探查器跟踪中没有其他热路径或长调用,但是,整个请求中还有其他 DB 和 REST 调用,并且它们也是异步完成的(并且使用 wait 而不是 .Result 正确完成)。

也没有复杂的方法,但主要是外部异步调用。线程池耗尽?我们正在使用 ASPNET.CORE 和 netframework451

非常感谢任何见解。

profiler image

最佳答案

在我看来,这是正确的事情。我猜你可能对await理解不太清楚。

来自 azure article .

等待 (AWAIT_TIME)

AWAIT_TIME 表示代码正在等待另一个任务完成。这通常发生在 C# 的“await”语句中。当代码执行 C#“等待”时,线程展开并将控制权返回给线程池,并且没有线程被阻止等待“等待”完成。 但是,从逻辑上讲,执行等待的线程被“阻塞”,等待操作完成。 AWAIT_TIME表示等待任务完成的阻塞时间。

所以你的代码仍然被阻塞等待异步调用完成,但是会释放线程来做其他事情。

关于c# - Application Insights Profiler 和 "AWAIT_TIME",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46551913/

相关文章:

c# - 实体更改后更新 IMemoryCache

c# - 如何异步更新 winform?

ios - 为什么我在 Controller 代码之前执行 View 代码?

c# - Nito.AsyncEx.AsyncLock 堆栈溢出,带有大量等待者和同步快速路径

c# - 类数组

c# - 禁用 winforms 设计器中的属性设置

javascript - 发布到 Azure FHIR 服务器方法失败身份验证失败 401

ruby - AzureRM 应用程序网关 Rest API

javascript - 我的 javascript SignalR Azure 连接未触发事件

c# - 在 XAML 中设置可为 null 的 TimeSpan