Jak zrobić odpowiednie Parallel.ForEach, blokowanie i raportowanie postępu

Próbuję zaimplementowaćParallel.ForEach wzorzec i śledzenie postępu, ale brakuje mi czegoś związanego z blokowaniem. Poniższy przykład liczy się do 1000, gdythreadCount = 1, ale nie kiedythreadCount > 1. Jaki jest właściwy sposób na to?

class Program
{
   static void Main()
   {
      var progress = new Progress();
      var ids = Enumerable.Range(1, 10000);
      var threadCount = 2;

      Parallel.ForEach(ids, new ParallelOptions { MaxDegreeOfParallelism = threadCount }, id => { progress.CurrentCount++; });

      Console.WriteLine("Threads: {0}, Count: {1}", threadCount, progress.CurrentCount);
      Console.ReadKey();
   }
}

internal class Progress
{
   private Object _lock = new Object();
   private int _currentCount;
   public int CurrentCount
   {
      get
      {
         lock (_lock)
         {
            return _currentCount;
         }
      }
      set
      {
         lock (_lock)
         {
            _currentCount = value;
         }
      }
   }
}

questionAnswers(6)

yourAnswerToTheQuestion