C#을 사용하면 WebRequest에서 응답을 받기 시작하는 데 걸리는 시간을 결정해야합니다 (지금은 전체 응답을 다운로드하는 데 걸리는 시간이 걱정 스럽습니다).WebResponse의 첫 번째 비트까지 시간을 얻으려면 어떻게해야합니까?
나는 이것을 이해하기 위해 WebRequest의 비동기 메서드를 사용해야한다. 여기에 내가 가지고 올 한 내용은 다음과 같습니다. "값이 있어야합니다 Null 허용 대상"
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