using System.Collections.Concurrent; namespace ARMeilleure.Translation { class PriorityQueue { private ConcurrentQueue[] _queues; public PriorityQueue(int priorities) { _queues = new ConcurrentQueue[priorities]; for (int index = 0; index < priorities; index++) { _queues[index] = new ConcurrentQueue(); } } public void Enqueue(int priority, T value) { _queues[priority].Enqueue(value); } public bool TryDequeue(out T value) { for (int index = 0; index < _queues.Length; index++) { if (_queues[index].TryDequeue(out value)) { return true; } } value = default(T); return false; } } }