title: Why return type of async must be void, Task or Task<T>
body: <p>I am trying get my hands dirty with async CTP and I noticed that the compiler complains about the async return type. What is the problem with other types?</p>
  
  <p>A simple demo</p>
  
  <pre><code>static void Main(string[] args)
  {
      DoWork();
      Console.WriteLine("Returned to main");
      Console.Read();
  }
  
  // why do I need to return void, Task or Task&lt;T&gt; here?
  // I know I can use something like Task&lt;IEnumerable&lt;string&gt;&gt;
  private static async string[] DoWork()
  {
      Console.WriteLine("DoWork started");
      return await Task.Factory.StartNew(
          delegate
          {
              Thread.Sleep(2000);                
              Console.WriteLine("DoWork done");
              return new List&lt;string&gt;();
          });        
  }
  </code></pre>