This gets tricky since we're doing async calls.
Do this in the following order:
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request)
Then in 'GetRequestStreamCallback(IAsyncResult asynchronousResult)' call:
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request)
Lastly, in the GetResponse, be sure to close the stream:
response.Close();
allDone.Set();
MSDN Does a really good job explaining it: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetrequeststream.aspx