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;
}
これにより、「Nullable オブジェクトには値が必要です」という結果になります。これは、WaitOne() メソッドと EndGetResponse メソッドが実際には非同期呼び出しの完了を待っていないことを示しているようです。
では、BeginGetResponse() が完了するまで待つにはどうすればよいでしょうか。そして、これは実際にリクエストの応答時間を決定する正しい方法ですか?