title: How to reset a CancellationToken properly?
body: <p>I have been playing round with the <code>Async CTP</code> this morning and have a simple program with a <code>button</code> and a <code>label</code>. Click the <code>button</code> and it starts updating the <code>label</code>, stop the <code>button</code> it stops writing to the <code>label</code>. However, I'm not sure how to reset the <code>CancellationTokenSource</code> so that I can restart the process. </p>
  
  <p>My code:</p>
  
  <pre><code>public partial class MainWindow : Window
  {
      CancellationTokenSource cts = new CancellationTokenSource();
      public MainWindow()
      {
          InitializeComponent();
          button.Content = "Start";
      }
  
      async Task DoWork(CancellationToken cancelToken)
      {
          int i = 0;
          while (!cancelToken.IsCancellationRequested)
          {
              label.Content = i++.ToString();
              await TaskEx.Delay(50, cancelToken);
          }
      }
  
      private void Button_Click(object sender, RoutedEventArgs e)
      {
          if (button.Content == "Start")
          {
              button.Content = "Stop";
              DoWork(cts.Token);
          }
          else
          {
              button.Content = "Start";
              cts.Cancel();
          }
      }
  }
  </code></pre>