首页 > 解决方案 > 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 变量正在计算总响应时间(带有下载文件),而不是等待响应。是否可以计算“等待下载响应”和“下载时间”?

标签: c#dotnet-httpclient

解决方案


通过HttpCompletionOption.ResponseHeadersRead

startSendRequest = DateTime.UtcNow;
var responseTask = HttpClient.GetAsync("Test/GetFile", HttpCompletionOption.ResponseHeadersRead);
endSendRequest = DateTime.UtcNow;

旁注:更喜欢Stopwatch用于计时。DateTime.UtcNow由于夏令时的变化,可以及时向前或向后跳跃。 DateTime.UtcNow对于少量时间的计时是不准确的。


推荐阅读