title: ParallelEnumerable.GroupBy: how lazy it is?
body: <p>MSDN says that <code>ParallelEnumerable.GroupBy</code> groups in parallel the elements of a sequence according to a specified key selector function.
  So my question is: How lazy it is ?</p>
  <p>It's clear that <code>ParallelQuery&lt;IGrouping&lt;,&gt;&gt;</code> is lazy. But what about <code>IGrouping&lt;&gt;</code> itself, is it lazy as well ?</p>
  <p>So, if I do the following:</p>
  <pre><code>var entities = sites.AsParallel()
                           .Select(x =&gt; GetDataItemsFromWebsiteLazy(x))
                           .SelectMany(x =&gt; x)
                           .GroupBy(dataItem =&gt; dataItem.Url.Host)
                           .AsParallel()
                               .SelectMany(x =&gt; TransformToEntity(x));
  </code></pre>
  <p>Will <code>TransformToEntity</code> be called first time after all sites will fetch results?<br />
  Or as soon as first <code>GetDataItemsFromWebsiteLazy()</code> method will yield return an element?</p>
  <p>The point of all that is to fire requests to different hosts in parallel.<br />
  Data processing goes as follows. For every website in a set:</p>
  <ol>
  <li>Request website</li>
  <li>Parse response and extract another site url</li>
  <li>Request site by extracted url</li>
  <li>Parse response and create entity from obtained data</li>
  </ol>