public override IAsyncResult BeginGetResponse (AsyncCallback callback, object state)
{
if (Aborted)
throw new WebException ("The request was canceled.", WebExceptionStatus.RequestCanceled);
if (method == null)
throw new ProtocolViolationException ("Method is null.");
string transferEncoding = TransferEncoding;
if (!sendChunked && transferEncoding != null && transferEncoding.Trim () != "")
throw new ProtocolViolationException ("SendChunked should be true.");
Monitor.Enter (locker);
getResponseCalled = true;
if (asyncRead != null && !haveResponse) {
Monitor.Exit (locker);
throw new InvalidOperationException ("Cannot re-call start of asynchronous " +
"method while a previous call is still in progress.");
}
CheckIfForceWrite ();
asyncRead = new WebAsyncResult (this, callback, state);
WebAsyncResult aread = asyncRead;
initialMethod = method;
if (haveResponse) {
Exception saved = saved_exc;
if (webResponse != null) {
Monitor.Exit (locker);
if (saved == null) {
aread.SetCompleted (true, webResponse);
} else {
aread.SetCompleted (true, saved);
}
aread.DoCallback ();
return aread;
} else if (saved != null) {
Monitor.Exit (locker);
aread.SetCompleted (true, saved);
aread.DoCallback ();
return aread;
}
}
if (!requestSent) {
requestSent = true;
redirects = 0;
servicePoint = GetServicePoint ();
abortHandler = servicePoint.SendRequest (this, connectionGroup);
}
Monitor.Exit (locker);
return aread;
}