Blocking Queue in C#

Here’s a simple implementation of a blocking queue in C#. This can be used for consumer producer scenarios, buffered messaging, worker pools etc.

using System.Collections.Generic;
using System.Threading;

namespace BlockingQueue{
public class BlockingQueue<T> {
   private Queue<T> q = new Queue<T>();

   public void Enqueue(T element) {
       q.Enqueue(element);
       lock (q) {
           Monitor.Pulse(q);
       }
   }

   public T Get() {
       lock(q) {
           while (q.Count == 0) {
               Monitor.Wait(q);
           }
           return q.Dequeue();
       }
   }
}
}