title: Execute task in background in WPF application
body: <p>Example</p>
  
  <pre><code>private void Start(object sender, RoutedEventArgs e)
  {
      int progress = 0;
      for (;;)
      {
          System.Threading.Thread.Sleep(1);
          progress++;
          Logger.Info(progress);
      }
  }
  </code></pre>
  
  <p>What is the recommended approach (TAP or TPL or BackgroundWorker or Dispatcher or others) if I want <code>Start()</code> to</p>
  
  <ol>
  <li>not block the UI thread</li>
  <li>provide progress reporting</li>
  <li>be cancelable</li>
  <li>support multithreading</li>
  </ol>