title: Async lambda expression with await returns Task?
body: <p>I have the following code:</p>
  
  <pre><code>            // Get all of the files from the local storage directory.
          var files = await folder.GetFilesAsync();
  
          // Map each file to a stream corresponding to that file.
          var streams = files.Select(async f =&gt; { return await f.OpenStreamForWriteAsync(); });
  </code></pre>
  
  <p>I would expect <code>streams</code> to be of type <code>IEnumerable&lt;Stream&gt;</code> but in fact it is of <code>IEnumberable&lt;Task&lt;Stream&gt;&gt;</code>, which is what I would've expected had I omitted the await keyword. The return type of <code>OpenStreamForWriteAsync</code> is <code>Task&lt;Stream&gt;</code> — surely awaiting it should produce a <code>Stream</code>?</p>
  
  <p>So, why is the return await statement returning a Task?</p>
  
  <p>Thanks for your help.</p>