title: Why should I prefer single 'await Task.WhenAll' over multiple awaits?
body: <p>In case I do not care about the order of task completion and just need them all to complete, should I still use <code>await Task.WhenAll</code> instead of multiple <code>await</code>? e.g, is <code>DoWork2</code> below a preferred method to <code>DoWork1</code> (and why?):</p>
  
  <pre><code>using System;
  using System.Threading.Tasks;
  
  namespace ConsoleApp
  {
      class Program
      {
          static async Task&lt;string&gt; DoTaskAsync(string name, int timeout)
          {
              var start = DateTime.Now;
              Console.WriteLine("Enter {0}, {1}", name, timeout);
              await Task.Delay(timeout);
              Console.WriteLine("Exit {0}, {1}", name, (DateTime.Now - start).TotalMilliseconds);
              return name;
          }
  
          static async Task DoWork1()
          {
              var t1 = DoTaskAsync("t1.1", 3000);
              var t2 = DoTaskAsync("t1.2", 2000);
              var t3 = DoTaskAsync("t1.3", 1000);
  
              await t1; await t2; await t3;
  
              Console.WriteLine("DoWork1 results: {0}", String.Join(", ", t1.Result, t2.Result, t3.Result));
          }
  
          static async Task DoWork2()
          {
              var t1 = DoTaskAsync("t2.1", 3000);
              var t2 = DoTaskAsync("t2.2", 2000);
              var t3 = DoTaskAsync("t2.3", 1000);
  
              await Task.WhenAll(t1, t2, t3);
  
              Console.WriteLine("DoWork2 results: {0}", String.Join(", ", t1.Result, t2.Result, t3.Result));
          }
  
  
          static void Main(string[] args)
          {
              Task.WhenAll(DoWork1(), DoWork2()).Wait();
          }
      }
  }
  </code></pre>