In many concurrent systems, one thread performs some work, the result of which another thread consumes. This producer/consumer pattern is frequently implemented on top of blocking queues. If you examine the behavior of System.Collections.Queue and System.Collections.Generic.Queue<T>,