using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections.Concurrent; namespace Aitex.Core.Util { public class FixSizeQueue { public int FixedSize { get; private set; } public int Count { get { lock (_locker) { return _innerQueue.Count; } } } private Queue _innerQueue; private object _locker = new object(); public FixSizeQueue(int size) { FixedSize = size; _innerQueue = new Queue(); } public void Enqueue(T obj) { lock (_locker) { _innerQueue.Enqueue(obj); } } public bool TryDequeue(out T obj) { lock (_locker) { obj = default (T); if (_innerQueue.Count > 0) { obj = _innerQueue.Dequeue(); return true; } return false; } } public List ToList() { lock (_locker) { return _innerQueue.ToList(); } } public void Clear() { lock (_locker) { _innerQueue.Clear(); } } public T ElementAt(int index) { lock (_locker) { return _innerQueue.ElementAt(index); } } public bool IsEmpty() { lock (_locker) { return _innerQueue.Count==0; } } } }