Example #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;
         }
     }
 }
Example #2
0
        private void ProcessPrioritizedAndBatchedTasks()
        {
            Task task;
            bool flag = true;

            while (!this._disposeCancellation.IsCancellationRequested && flag)
            {
                try
                {
                    QueuedTaskScheduler._taskProcessingThread.Value = true;
                    while (!this._disposeCancellation.IsCancellationRequested)
                    {
                        lock (this._nonthreadsafeTaskQueue)
                        {
                            if (this._nonthreadsafeTaskQueue.Count != 0)
                            {
                                task = this._nonthreadsafeTaskQueue.Dequeue();
                            }
                            else
                            {
                                break;
                            }
                        }
                        QueuedTaskScheduler.QueuedTaskSchedulerQueue queuedTaskSchedulerQueue = null;
                        if (task == null)
                        {
                            lock (this._queueGroups)
                            {
                                this.FindNextTask_NeedsLock(out task, out queuedTaskSchedulerQueue);
                            }
                        }
                        if (task == null)
                        {
                            continue;
                        }
                        if (queuedTaskSchedulerQueue == null)
                        {
                            base.TryExecuteTask(task);
                        }
                        else
                        {
                            queuedTaskSchedulerQueue.ExecuteTask(task);
                        }
                    }
                }
                finally
                {
                    lock (this._nonthreadsafeTaskQueue)
                    {
                        if (this._nonthreadsafeTaskQueue.Count == 0)
                        {
                            QueuedTaskScheduler queuedTaskScheduler = this;
                            queuedTaskScheduler._delegatesQueuedOrRunning = queuedTaskScheduler._delegatesQueuedOrRunning - 1;
                            flag = false;
                            QueuedTaskScheduler._taskProcessingThread.Value = false;
                        }
                    }
                }
            }
        }
Example #3
0
 public QueuedTaskSchedulerQueueDebugView(QueuedTaskScheduler.QueuedTaskSchedulerQueue queue)
 {
     if (queue == null)
     {
         throw new ArgumentNullException("queue");
     }
     this._queue = queue;
 }
Example #4
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);
        }
Example #5
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);
 }