title: async method in C# not asynchronous?
body: <p>Having created the following console application I am a little puzzled why it seems to run synchronously instead of asynchronously:</p>
  
  <pre><code>class Program
  {
      static void Main(string[] args)
      {
          Stopwatch stopwatch = new Stopwatch();
          stopwatch.Start();
          var total = CreateMultipleTasks();
          stopwatch.Stop();
  
          Console.WriteLine("Total jobs done: {0} ms", total.Result);
          Console.WriteLine("Jobs done in: {0} ms", stopwatch.ElapsedMilliseconds);
      }
  
      static async Task&lt;int&gt; CreateMultipleTasks()
      {
          var task1 = WaitForMeAsync(5000);
          var task2 = WaitForMeAsync(3000);
          var task3 = WaitForMeAsync(4000);
  
          var val1 = await task1;
          var val2 = await task2;
          var val3 = await task3;
  
          return val1 + val2 + val3;
  
      }
  
      static Task&lt;int&gt; WaitForMeAsync(int ms)
      {
          Thread.Sleep(ms);
          return Task.FromResult(ms);
      }
  }
  </code></pre>
  
  <p>When running the application, output is:  </p>
  
  <blockquote>
    <p>Total jobs done: 12000 ms<br>
    Jobs done in: 12003 ms</p>
  </blockquote>
  
  <p>I would have expected somehing like:  </p>
  
  <blockquote>
    <p>Total jobs done: 12000 ms<br>
    Jobs done in: 5003 ms</p>
  </blockquote>
  
  <p>Is this because when I use the Thread.Sleep method it stops further execution of the whole application? Or am I missing something important here?</p>