title: Await on a completed task same as task.Result?
body: <p>I'm currently reading "<em>Concurrency in C# Cookbook</em>" by Stephen Cleary, and I noticed the following technique:  </p>
  
  <pre><code>var completedTask = await Task.WhenAny(downloadTask, timeoutTask);  
  if (completedTask == timeoutTask)  
    return null;  
  return await downloadTask;  
  </code></pre>
  
  <p><code>downloadTask</code> is a call to <code>httpclient.GetStringAsync</code>, and <code>timeoutTask</code> is executing <code>Task.Delay</code>.</p>
  
  <p>In the event that it didn't timeout, then <code>downloadTask</code> is already completed. Why is necessary to do a second await instead of returning <code>downloadTask.Result</code>, given that the task is already completed?</p>