title: async await and threading
body: <p>based on what I have read on <a href="https://msdn.microsoft.com/en-us/library/mt674882.aspx" rel="noreferrer">MSDN</a></p>
  
  <blockquote>
    <p>The async and await keywords don't cause additional threads to be
    created. Async methods don't require multithreading because an async
    method doesn't run on its own thread. The method runs on the current
    synchronization context and uses time on the thread only when the
    method is active. You can use Task.Run to move CPU-bound work to a
    background thread, but a background thread doesn't help with a process
    that's just waiting for results to become available.</p>
  </blockquote>
  
  <p>It is basically saying no thread will be created. But inside a class which I inherited <code>HttpClient</code> I found something interesting..</p>
  
  <pre><code>async Task&lt;T&gt; SendAsync&lt;T&gt;(HttpMethod method, Uri uri, HttpContent content, CancellationToken cancellationToken) 
  {
          HttpRequestMessage msg = new HttpRequestMessage(method, uri); 
          msg.Content = content;
          //On Main Thread
          HttpResponseMessage response = await SendAsync(msg, cancellationToken);
          //On worker thread
          //...
  }
  </code></pre>
  
  <p>the method is called inside <code>static void Main</code> </p>
  
  <pre><code>Task result = client.GetAsync&lt;string&gt;(...);
  //GetAsync calls await SendAsync&lt;T&gt;
  result.Wait();
  </code></pre>
  
  <p>Why am I on a separate thread after <code>await SendAsnc</code> call?? I thought asyn creats no new thread. Or at least it will be invoked back to the original thread after await. </p>