title: Task<T>.Result and string concatenation
body: <p>I was playing with <code>async / await</code> when I came across the following:</p>
  
  <pre><code>class C
  {
      private static string str;
  
      private static async Task&lt;int&gt; FooAsync()
      {
          str += "2";
          await Task.Delay(100);
          str += "4";
          return 5;
      }
  
      private static void Main(string[] args)
      {
          str = "1";
          var t = FooAsync();
          str += "3";
  
          str += t.Result; // Line X
  
          Console.WriteLine(str);
      }
  }
  </code></pre>
  
  <p>I expected the result to be "12345", but it was "1235". Somehow '4' was eaten up.</p>
  
  <p>If I split Line X into:</p>
  
  <pre><code>int i = t.Result;
  str += i;
  </code></pre>
  
  <p>Then the expected "12345" results.</p>
  
  <p>Why is it so? (Using VS2012)</p>