c# - 秒表计时异步/等待方法不准确

标签 c# asynchronous async-await stopwatch

我正在编写一些性能测试,并希望能够为异步方法计时。代码如下所示,其中 actionFunc<Task<HttpResponseMessage>> :

var sw = new Stopwatch();
HttpResponseMessage response = null;

sw.Start();
response = await action().ConfigureAwait(continueOnCapturedContext: false);
sw.Stop();

代码编译和运行正常,但测得的毫秒数比我们在 Fiddler 中看到的请求时间长约 100 倍 - Fiddler 报告 200-300 毫秒,但秒表报告 ~30,000 毫秒。定时异步方法有什么问题吗?解决方案是在 Action 本身中进行计时(这会很烦人吗?)

最佳答案

这应该可以很好地测量完成异步任务所需的真实时间。您需要记住:

  1. 您使用 Fiddler 测量的时间仅测量请求,而不是您的代码处理响应所花费的时间。
  2. 此处的时间存在显着差异,您应该能够轻松地自己对代码计时,以了解从请求之前的断点到请求之后的断点需要多长时间。如果这接近 30 秒,那么您的秒表可能是准确的。
  3. 对我来说没有任何明显的东西会使你的时间不准确。

关于c# - 秒表计时异步/等待方法不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31592279/

相关文章:

c# - 使用 NUnit 的 .NET 的 TDD 工作流最佳实践

c# - 构建后将 XDeclaration 添加到 XDocument

node.js - 如何返回 Node.js 回调

reactjs - 使用动态导入测试 React 组件 (Enzyme/Mocha)

c# - 如何在异步方法运行时阻止方法而不导致 UI 线程中的死锁

c# - 如何将此文本保存在 C# 中的变量中?

c# - 部分类中的接口(interface)实现问题

google-app-engine - GAE Go——异步数据存储 API?

java - 回调和事件的区别

javascript - 是什么让 `async/await` 语句在 ES6 中顺序运行而不是并行运行?