Files

80 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Quobject.SocketIoClientDotNet.Collections.Concurrent
{
public class ConcurrentQueue<T>
{
private Queue<T> m_Queue;
private object m_SyncRoot = new object();
public int Count
{
get { return m_Queue.Count; }
}
public void Clear()
{
lock (m_SyncRoot)
{
m_Queue.Clear();
}
}
public List<T> GetEnumerator()
{
lock (m_SyncRoot)
{
var result = new List<T>();
foreach (var item in m_Queue)
{
result.Add((T)item);
}
return result;
}
}
public ConcurrentQueue()
{
m_Queue = new Queue<T>();
}
public ConcurrentQueue(int capacity)
{
m_Queue = new Queue<T>(capacity);
}
public ConcurrentQueue(IEnumerable<T> collection)
{
m_Queue = new Queue<T>(collection);
}
public void Enqueue(T item)
{
lock (m_SyncRoot)
{
m_Queue.Enqueue(item);
}
}
public bool TryDequeue(out T item)
{
lock (m_SyncRoot)
{
if (m_Queue.Count <= 0)
{
item = default(T);
return false;
}
item = m_Queue.Dequeue();
return true;
}
}
}
}