使用C#,我需要確定從WebRequest接收響應所需的時間(現在,我不擔心下載完整響應所需的時間)。如何獲得WebResponse的第一個位的時間?
從我可以理解,要做到這一點,我需要使用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()完成?這確實是確定請求響應時間的正確方法嗎?
你不能使用WebClient類嗎?它有你可能處理的DownloadProgressChanged事件。 –
您使用異步功能是沒有意義的。您正在等待異步結果嗎?那不是異步的。 – usr
@Adriano - 我會研究一下,謝謝。 usr - 我對異步執行操作不感興趣,它看起來像獲取我需要的信息的必要手段。 – James