title: Returning IEnumerable Implementation from within Task
body: <p>I can do:</p>
  
  <pre><code>public static IEnumerable&lt;string&gt; Do()
  {
     return new List&lt;string&gt;();
  }
  </code></pre>
  
  <p>But if I'm returning a Task, I'm not allowed to do the same thing:</p>
  
  <pre><code>public static Task&lt;IEnumerable&lt;string&gt;&gt; DoTask()
  {
      return Task.Factory.StartNew(() =&gt;
      {
          return new List&lt;string&gt;(); //no no
      });
  }
  </code></pre>
  
  <p>I'm implementing a async repository in .NET 4.0 and ran across this. I was just curious why the compiler can't cast my <code>List</code> down when wrapped in a Task? Of course, my work around is just throwing <code>AsEnumerable</code> on it , but I wonder why this limitation exists?</p>