title: Any difference between "await Task.Run(); return;" and "return Task.Run()"?
body: <p>Is there any conceptual difference between the following two pieces of code:</p>
  
  <pre><code>async Task TestAsync() 
  {
      await Task.Run(() =&gt; DoSomeWork());
  }
  </code></pre>
  
  <p>and</p>
  
  <pre><code>Task TestAsync() 
  {
      return Task.Run(() =&gt; DoSomeWork());
  }
  </code></pre>
  
  <p>Does the generated code differ, either?</p>
  
  <p><strong>EDIT:</strong> To avoid confusion with <code>Task.Run</code>, a similar case:</p>
  
  <pre><code>async Task TestAsync() 
  {
      await Task.Delay(1000);
  }
  </code></pre>
  
  <p>and</p>
  
  <pre><code>Task TestAsync() 
  {
      return Task.Delay(1000);
  }
  </code></pre>
  
  <p><strong>LATE UPDATE:</strong> In addition to the accepted answer, there is also a difference in how <code>LocalCallContext</code> gets handled: <a href="https://stackoverflow.com/q/31408515/2674222">CallContext.LogicalGetData gets restored even where there is no asynchrony. Why?</a></p>