private bool TryDequeue(out EnqueuedTask task) { Lock.EnterWriteLock(); try { if (Queue.Count() != 0) { task = Queue.Dequeue(); return(true); } task = null; return(false); } finally { Lock.ExitWriteLock(); } }
public EnqueuedTask Enqueue(double priority, Action action) { Lock.EnterWriteLock(); try { EnqueuedTask task = new EnqueuedTask(this, priority, action, Guid.NewGuid()); Queue.Enqueue(task); if (Interlocked.Read(ref _workerCount) < MaxConcurrent) { Interlocked.Increment(ref _workerCount); _threadPool.QueueUserWorkItem(Worker); } return(task); } finally { Lock.ExitWriteLock(); } }