title: "await Task.Yield()" and its alternatives
body: <p>If I need to postpone code execution until after a future iteration of the UI thread message loop, I could do so something like this:</p>
  
  <pre><code>await Task.Factory.StartNew(
      () =&gt; {
          MessageBox.Show("Hello!");
      },
      CancellationToken.None,
      TaskCreationOptions.None,
      TaskScheduler.FromCurrentSynchronizationContext());
  </code></pre>
  
  <p>This would be similar to <code>await Task.Yield(); MessageBox.Show("Hello!");</code>, besides I'd have an option to cancel the task if I wanted to.</p>
  
  <p>In case with the default synchronization context, I could similarly use <code>await Task.Run</code> to continue on a pool thread.</p>
  
  <p>In fact, I like <code>Task.Factory.StartNew</code> and <code>Task.Run</code> more than <code>Task.Yield</code>, because they both explicitly define the scope for the continuation code. </p>
  
  <p><strong>So, in what situations <code>await Task.Yield()</code> is actually useful?</strong></p>