【问题标题】:Application Insights Profiler and "AWAIT_TIME"Application Insights Profiler 和“AWAIT_TIME”
【发布时间】:2018-03-15 01:59:24
【问题描述】:

这里到底发生了什么?实际调用需要 8000 毫秒,但实际 DB 调用只需要

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

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

非常感谢任何见解。

【问题讨论】:

  • 我相信这是由于打开连接的持续时间在一段时间后呈指数增长。我可能不得不研究有效使用 sql 连接的不同方法。

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


【解决方案1】:

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

来自天蓝色article

等待(AWAIT_TIME)

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

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

【讨论】:

  • 我想我对异步的工作原理有很好的理解,如果 DB-query 持续时间对应于 AWAIT_TIME 是没有问题的,但它只需要 ~100ms。这就是为什么我有点迷茫。哦,也许我应该添加时间,因为 BLOCKET_TIME 只有几毫秒,而 AWAIT_TIME 是强盗
  • 我赞同@Mattias 的困惑。您不能只删除 await 以使其运行得更快。问题是“为什么有这么多等待时间”,而不是“等待如何工作?”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2019-07-14
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多