title: Yield return in parallel
body: <p>I have a web app that allows the user to submit a job that can have many long running tasks. I am using yield return to allow the web app to show a progress bar however this enforces synchronous execution.</p>
  
  <p>What i would like to do is take my list of tasks, run them in parallel but still provide feedback to the user.</p>
  
  <p>In the below code, I still want to yield return after each call to Infer but i would like to run the loop in parallel. If this is not possible with yield then what are my options?</p>
  
  <p>More specifically, what i want to do is split the requests into smaller collections and have those smaller collections run in parallel.</p>
  
  <p>For the purposes of the question, lets say i wanted to split 'requests' into 'requests1' and 'requests2' and those then run in parallel yet still be able to yield back to the caller after each item completes.</p>
  
  <pre><code>    public IEnumerable&lt;AnnotationRequest&gt; Infer(List&lt;Uri&gt; fileUris, CancellationToken? token)
      {
          var requests = fileUris.Select(uri =&gt; new AnnotationRequest() { Uri = uri }).ToList();
  
          foreach ( var result in Infer(requests, token) )
          {
              yield return result;
          }
      }
  </code></pre>