【问题标题】:How in C # HttpClient calculate the time to send a request, time to wait for a response, and time to receive a response?C#HttpClient中如何计算发送请求的时间、等待响应的时间、接收响应的时间?
【发布时间】:2021-10-03 13:35:18
【问题描述】:

我有以下代码

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

【问题讨论】:

  • (连续两次从DateTime.UtcNow 分配看起来值得商榷。我不喜欢这样增加时间的侵入性。)

标签: c# dotnet-httpclient


【解决方案1】:

通过HttpCompletionOption.ResponseHeadersRead:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
相关资源
最近更新 更多