c# - C#HttpClient中如何计算发送请求的时间、等待响应的时间、接收响应的时间?
问题描述
我有以下代码
DateTime startSendRequest;
DateTime endSendRequest;
DateTime startWaitingResponse;
DateTime endWaitingResponse;
DateTime startGetResponse;
DateTime endGetResponse;
HttpResponseMessage response;
startSendRequest = DateTime.UtcNow;
var responseTask = HttpClient.GetAsync("Test/GetFile");
endSendRequest = DateTime.UtcNow;
startWaitingResponse = DateTime.UtcNow;
response = await responseTask;
endWaitingResponse = DateTime.UtcNow;
startGetResponse = DateTime.UtcNow;
var fs = new FileStream(@"C:\test\SampleFile.txt", FileMode.Create, FileAccess.Write, FileShare.None);
await response.Content.CopyToAsync(fs);
endGetResponse = DateTime.UtcNow;
在我看来, startWaitingResponse 和 endWaitingResponse 变量正在计算总响应时间(带有下载文件),而不是等待响应。是否可以计算“等待下载响应”和“下载时间”?
解决方案
通过HttpCompletionOption.ResponseHeadersRead
:
startSendRequest = DateTime.UtcNow;
var responseTask = HttpClient.GetAsync("Test/GetFile", HttpCompletionOption.ResponseHeadersRead);
endSendRequest = DateTime.UtcNow;
旁注:更喜欢Stopwatch
用于计时。DateTime.UtcNow
由于夏令时的变化,可以及时向前或向后跳跃。DateTime.UtcNow
对于少量时间的计时是不准确的。
推荐阅读
- php - 如何在 PHP 中获取通知/警告作为对象?
- r - 基于R中的列值聚合数据框
- php - 更改配置后 Laravel DB 连接不刷新
- firebase - Firebase CLI 命令不适用于 VS Code Git Bash 终端
- java - 大文本数据的非对称密码算法
- reactjs - 在 mapDispatchToProps 之后找不到函数
- javascript - 如何以编程方式检测离子应用程序中是否开启了飞行模式
- jquery - 回复:process.env.PORT || '3000' 带有红色下划线
- python - 关于在不同 Linux 发行版中使用 conda-pack 的问题
- javascript - Jquery Regex - 检查一个或多个逗号分隔值(12 个十六进制字符)