title: Asynchronous Webrequest best practices
body: <p>What is the best practice for getting a webrequest asynchronously?</p>
  
  <p>I want to download a page from the internet (doesn't matter what)
  and avoid blocking a thread as much as possible.</p>
  
  <p>Previously I believed that it was enough to just use the 'BeginGetResponse' and 'EndGetResponse' pair.  But on closer inspection I also see that there is the option of using 'BeginGetRequestStream' </p>
  
  <p><strong>[UPDATE]</strong> GetRequestStream is used for POST operations</p>
  
  <p>And then to add to the confusion, Should I be using stream.BeginRead and EndRead?</p>
  
  <p><strong>[UPDATE]</strong> this <a href="http://tomasp.net/blog/csharp-async.aspx" rel="noreferrer">article</a> suggests it is even better to process the HttpResponse.GetResponseStream asynchronously using Stream.BeginRead</p>
  
  <p>What a mess!</p>
  
  <p>Can someone point me in the right direction?</p>
  
  <p>What is the Best Practice?</p>