title: Single producer multiple consumer implementation
body: <p>Consider the following situation</p>
  
  <pre><code> private BlockingCollection&lt;Consumer&gt; consumers { get; set; }
  
  
   ThreadPool.QueueUserWorkItem((x) =&gt; {
  
                  while (consumers.Count == 0)
                      Thread.Sleep(20);
  
                  Consumer consumer;
                  if (consumers.TryTake(out consumer)) {
                      var result = consumer.Read(data);
                      //do stuff with result
                      if (consumers.TryAdd(consumer)) {
                          //ok
                      }
                  }
              });
  </code></pre>
  
  <p>Is there a way to avoid this timeout when there isn't a consumer available to process the request?</p>