private void FindNextTask_NeedsLock(out Task targetTask, out QueuedTaskScheduler.QueuedTaskSchedulerQueue queueForTargetTask) { targetTask = null; queueForTargetTask = null; foreach (KeyValuePair <int, QueuedTaskScheduler.QueueGroup> _queueGroup in this._queueGroups) { QueuedTaskScheduler.QueueGroup value = _queueGroup.Value; foreach (int num in value.CreateSearchOrder()) { queueForTargetTask = value[num]; Queue <Task> tasks = queueForTargetTask._workItems; if (tasks.Count <= 0) { continue; } targetTask = tasks.Dequeue(); if (queueForTargetTask._disposed && tasks.Count == 0) { this.RemoveQueue_NeedsLock(queueForTargetTask); } value.NextQueueIndex = (value.NextQueueIndex + 1) % _queueGroup.Value.Count; return; } } }