title: Asynchronous methods and asynchronous delegates
body: <p><strong><em>C# 3.0 in a nutshell</em></strong> says <em>asynchronous methods</em> and <em>asynchronous delegates</em> looks similar but the behavior is very different. </p>
  
  <p>Here is what the book says about both.</p>
  
  <h2>Asynchronous methods</h2>
  
  <ol>
  <li>Rarely or never blocks any thread.</li>
  <li><em>Begin</em> method may not immediately return to the caller.</li>
  <li>An agreed protocol with no C# language support.</li>
  </ol>
  
  <h2>Asynchronous delegates</h2>
  
  <ol>
  <li>May block for any length of time</li>
  <li><em>BeginInvoke</em> return immediately to the caller.</li>
  <li>Built-in compiler support.</li>
  </ol>
  
  <p>The book also says, <em>The purpose of asynchronous methods is to allow many tasks to run on few threads; the purpose of asynchronous delegates is to execute a task in parallel with the caller</em>.</p>
  
  <p>When I looked into the <em>BeginRead()</em> method in <em>System.IO.Stream</em> class through reflector, it is using a delegate and calling <em>BeginInvoke</em> on that. So an asynchronous method is using an asynchronous delegate internally. </p>
  
  <ol>
  <li>In such case, how can one say their behaviors are different? Since it uses delegates internally, how a comparison like the above is possible?</li>
  <li>Do you think working with a delegate's BeginXXX method is the way to execute a function in parallel to the caller?</li>
  <li>What is the proper way to implement asynchronous methods by maintaining all the advantages like making good use of CPU? </li>
  </ol>
  
  <p>Any thoughts?</p>