title: classic producer consumer pattern using blockingcollection and tasks  .net 4 TPL
body: <p>Please see below pseudo code</p>
  
  <pre><code>//Single or multiple Producers produce using below method
      void Produce(object itemToQueue)
      {
          concurrentQueue.enqueue(itemToQueue);
          consumerSignal.set;
      }
  
      //somewhere else we have started a consumer like this
      //we have only one consumer
      void StartConsumer()
      {
          while (!concurrentQueue.IsEmpty())
          {
              if (concurrentQueue.TrydeQueue(out item))
              {
                  //long running processing of item
              }
          }
          consumerSignal.WaitOne();
      }
  </code></pre>
  
  <p>How do I port this pattern I have used since time immemorial to use taskfactory created tasks and the new signalling features of net 4. In other words if someone were to write this pattern using net 4 how would it look like ? Pseudo code is fine. Iam already using .net 4 concurrentQueue as you can see. How do I use a task and possibly use some newer signalling mechanism if possible. thanks</p>
  
  <p>Solution to my problem below thanks to Jon/Dan. Sweet. 
  No manual signalling or while(true) or while(itemstoProcess) type loops like the old days</p>
  
  <pre><code>//Single or multiple Producers produce using below method
   void Produce(object itemToQueue)
   {
       blockingCollection.add(item);
   }
  
   //somewhere else we have started a consumer like this
   //this supports multiple consumers !
   task(StartConsuming()).Start; 
  
   void StartConsuming()
   {
       foreach (object item in blockingCollection.GetConsumingEnumerable())
       {
                  //long running processing of item
       }
   }
  
  cancellations are handled using cancel tokens
  </code></pre>