使用 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;
}
这导致“可空对象必须有一个值”。这似乎表明 WaitOne() 和 EndGetResponse 方法实际上并没有像我认为的那样等待异步调用完成。
那么我该如何等到 BeginGetResponse() 完成呢?这确实是确定请求响应时间的正确方法吗?