title: What is the advantage of async over BeginXXX/EndXXX?
body: <p>When looking for an elegant way to asynchronously receive a stream of datagrams from a UDP socket, I came across this question: <a href="https://stackoverflow.com/questions/14860613/how-to-use-asynchronous-receive-for-udpclient-in-a-loop">How to use asynchronous Receive for UdpClient in a loop?</a></p>
  
  <p>The advantages of the first answer I understand, as they use the familiar <code>BeginReceive</code>/<code>EndReceive</code> methods. This solution is nice in that there are no threads hanging around being blocked.</p>
  
  <p>The <a href="https://stackoverflow.com/a/24154685/90328">second answer</a>, however gives two different Task-ish solutions, one using <code>ReceiveAsync</code> and the other using the synchronous <code>Receive</code> method. I'm wondering, in this case, what the advantage is. As I understand it, even in the <code>ReceiveAsync</code> case, there's still a (threadpool?) thread waiting around for things to happen.</p>
  
  <p>Is there an advantage in using Async methods in this case? If not, is there a way to implement this type of pattern using Async methods without the overhead of a thread, task, or other blocking object?</p>