title: Await method that returns Task - spins forever?
body: <p>I have the following NUnit test class:</p>
  
  <pre><code>[TestFixture]
  public class Tests
  {
      async Task&lt;string&gt; GetMessageAsync()
      {
          return "Hello from GetMessageAsync!";
      }
  
      Task&lt;string&gt; GetMessageTask()
      {
          return new Task&lt;string&gt;(() =&gt; "Hello from GetMessageTask!");
      }
  
      [Test]
      public async void AwaitAsyncMethod()
      {
          Assert.AreEqual("Hello from GetMessageAsync!", await GetMessageAsync());
      }
  
      [Test]
      public async void AwaitTaskMethod()
      {
          Assert.AreEqual("Hello from GetMessageTask!", await GetMessageTask());
      }
  }
  </code></pre>
  
  <p>The first test, AwaitAsyncMethod(), completes successfully immediately upon execution.  The second test, AwaitTaskMethod(), never completes.  But it does compile.</p>
  
  <p>Why does the second test never complete?  Why can I compile an await against a non-async method, if seemingly it doesn't actually work?  Let's say for some reason I want a non-async method to return a task that can be awaited - how do I change this code to accomplish that?</p>