C# ConcurrentQueue with limited number of items
publicclass LimitedConcurrentQueue<T> : ConcurrentQueue<T>
{
publicint Size { get; privateset; }
public LimitedConcurrentQueue(int size)
{
Size = size;
}
publicnewvoid Enqueue(T obj)
{
base.Enqueue(obj);
lock (this)
{
while (base.Count > Size)
{
T outObj;
base.TryDequeue(out outObj);
}
}
}
}
[Test]
publicvoid TestLimitedConcurrentQueue()
{
var queue = new LimitedConcurrentQueue<int>(3);
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
Console.WriteLine(string.Join(",", queue.ToArray()));
//gives 1,2,3 queue.Enqueue(4);
Console.WriteLine(string.Join(",", queue.ToArray()));
//gives 2,3,4}