title: Why async method return type can not be derived from Task?
body: <p>I have a class (simplified sample and only relevant parts shown) </p>
  
  <pre><code>public class AsyncScenario : Task&lt;Scenario&gt;
  {
      public async AsyncScenario Test(Func&lt;Task&gt; action)
      {
          return await this;           
      }
  }
  </code></pre>
  
  <p>I can't compile this because the return type of the method: </p>
  
  <blockquote>
    <p>Compiler error CS1983: "The return type of an async method must be void, Task or Task&lt;T>"</p>
  </blockquote>
  
  <p>Why is it not allowed for async method to return a class derived from <code>Task&lt;T&gt;</code>?</p>