如何获取WebResponse上第一个位的时间

本文关键字:第一个 时间 WebResponse 何获取 获取 | 更新日期: 2023-09-27 18:36:37

使用 C#,我需要确定开始接收来自 WebRequest 的响应所需的时间(目前,我不担心下载完整响应所需的时间)。

据我所知,要做到这一点,我需要使用 WebRequest 的异步方法。这是我想出的:

public TimeSpan TimeToFirstBit(string url)
{
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  request.Accept = "*/*";
  DateTime? firstBit = null;
  DateTime start = DateTime.Now;
  IAsyncResult asyncResult = request.BeginGetResponse(
      (async) => { firstBit = DateTime.Now; },
      null);
  asyncResult.AsyncWaitHandle.WaitOne();
  request.EndGetResponse(asyncResult);
  TimeSpan result = start - firstBit.Value; 
  // Previous line generates a System.InvalidOperationException: 
  // "Nullable object must have a value."
  return result;

}

这会导致"可为 null 的对象必须具有值"。这似乎表明 WaitOne() 和 EndGetResponse 方法实际上并没有像我认为的那样等待异步调用完成。

那么我该如何等到 BeginGetResponse() 完成呢?这确实是确定请求响应时间的正确方法吗?

如何获取WebResponse上第一个位的时间

如果您只想知道网络上的请求和响应之间的延迟,请使用网络数据包嗅探器,例如 Fiddler。与进程内计时器相比,我对数据包级别工具的计时数字更有信心。通过包括 .net 堆栈开销,进程内测量可能会略有偏差。如果您想知道的是服务器的响应速度,则不希望包括客户端开销。