title: Track progress when using TPL's Parallel.ForEach
body: <p>What is the best way way to track progress in the following </p>
  
  <pre><code>long total = Products.LongCount();
  long current = 0;
  double Progress = 0.0;
  
  Parallel.ForEach(Products, product =&gt;
  {
      try
      {
          var price = GetPrice(SystemAccount, product);
          SavePrice(product,price);
      }
      finally
      {
          Interlocked.Decrement(ref this.current);
      }});
  </code></pre>
  
  <p>I want to update the progress variable from 0.0 to 1.0 (current/total) but i don't want to use anything that would have an adverse effect on the parallelism.</p>