title: How to throw exception to caller from async method?
body: <p>Today I read a lot about async/await and it completely blew my mind.
  I can't understand why the following test passed.</p>
  
  <pre><code>[Test]
  public void Test()
  {
      var listener = new AsyncHttpListener();
      listener.ListeningAsync();
  
      try
      {
          new WebClient().DownloadString("http://localhost:8080/");
      }
      catch (Exception)
      {
      }
  
      listener.Close();
  }
  
  public class AsyncHttpListener
  {
      private readonly HttpListener listener;
  
      public AsyncHttpListener()
      {
          listener = new HttpListener();
          listener.Prefixes.Add("http://localhost:8080/");
          listener.Start();
      }
  
      public void Close()
      {
          listener.Close();
      }
  
      public async void ListeningAsync()
      {
          var context = await listener.GetContextAsync();
          HandleContext(context);
      }
  
      private void HandleContext(HttpListenerContext context)
      {
          throw new Exception("test excpetion");
      }
  }
  </code></pre>
  
  <p><br>
  Test passed, but output contains:</p>
  
  <pre>
  System.Exception
  test excpetion
     at AsyncHttpListenerTest.AsyncHttpListener.HandleContext(HttpListenerContext context) in AsyncHttpListener.cs: line 30
     at AsyncHttpListenerTest.AsyncHttpListener.d__0.MoveNext() in AsyncHttpListener.cs: line 25
  --- End of stack trace from previous location where exception was thrown ---
     at System.Runtime.CompilerServices.AsyncMethodBuilderCore.b__1(Object state)
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
     at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
     at System.Threading.ThreadPoolWorkQueue.Dispatch()
  </pre>
  
  <p>I expect that exception will be transmitted from task thread (HandleContext() method) to caller context and test fail. How can i get this behavior?</p>