コード例 #1
0
 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;
         }
     }
 }
コード例 #2
0
        private void RemoveQueue_NeedsLock(QueuedTaskScheduler.QueuedTaskSchedulerQueue queue)
        {
            QueuedTaskScheduler.QueueGroup item = this._queueGroups[queue._priority];
            int num = item.IndexOf(queue);

            if (item.NextQueueIndex >= num)
            {
                QueuedTaskScheduler.QueueGroup nextQueueIndex = item;
                nextQueueIndex.NextQueueIndex = nextQueueIndex.NextQueueIndex - 1;
            }
            item.RemoveAt(num);
        }
コード例 #3
0
 public TaskScheduler ActivateNewQueue(int priority)
 {
     QueuedTaskScheduler.QueueGroup queueGroup;
     QueuedTaskScheduler.QueuedTaskSchedulerQueue queuedTaskSchedulerQueue = new QueuedTaskScheduler.QueuedTaskSchedulerQueue(priority, this);
     lock (this._queueGroups)
     {
         if (!this._queueGroups.TryGetValue(priority, out queueGroup))
         {
             queueGroup = new QueuedTaskScheduler.QueueGroup();
             this._queueGroups.Add(priority, queueGroup);
         }
         queueGroup.Add(queuedTaskSchedulerQueue);
     }
     return(queuedTaskSchedulerQueue);
 }