title: What is `TaskEx.WhenAll` in the Async CTP?
body: <p>I thought TaskEx.WhenAll would return when all the tasks gets finished which is passed within the method. So await on TaskEx.WhenAll would return the array of Return statements, such that when every object gets finished, the array will be returned. </p>
  
  <p>But it is not so. When I do :</p>
  
  <pre><code>    public async Task AsynchronousCallServerMordernParallelAsync()
      {
  
          List&lt;Task&lt;string&gt;&gt; lstTasks = new List&lt;Task&lt;string&gt;&gt;();
  
          StringBuilder builder = new StringBuilder();
  
          for (int i = 2; i &lt;= 10; i++)
          {
              using (WebClient client = new WebClient())
              {
                  try
                  {
                      this.tbStatus.Text = string.Format("Calling Server [{0}]..... ", i);
                      string currentCall = string.Format(Feed, i);
                      Task&lt;string&gt; task = client.DownloadStringTaskAsync(new Uri(currentCall));
                      lstTasks.Add(task);
  
                  }
                  catch (Exception ex)
                  {
                      this.tbStatus.Text = string.Format("Error Occurred -- {0} for call :{1}, Trying next", ex.Message, i);
                  }
              }
  
              string[] rss = await TaskEx.WhenAll&lt;string&gt;(lstTasks);
              foreach(string s in rss)
                  builder.Append(s);
  
              MessageBox.Show(string.Format("Downloaded Successfully!!! Total Size : {0} chars.", builder.Length));
          }
  
      }
  </code></pre>
  
  <p>I see my MessageBox appears more than once, and also await steps in with array of 1 element, then array of 2 element and so on. </p>
  
  <p>Can anyone tell me what exactly the nature of TakEx.WhenAll?</p>