/// <summary> /// Добавляет задачу <paramref name="aTask"/> в очередь задач на выполнение. /// </summary> /// <param name="aTask"> /// Задача, добавляемая в очередь задач на выполнение. /// </param> /// <param name="aTaskPriority"> /// Приоритет задачи. /// </param> private void EnqueueTask(Task_INCORRECT aTask, TaskPriority aTaskPriority) { TaskListEntry lEntry = new TaskListEntry(aTask, aTaskPriority); LogPriority(aTaskPriority, ConsoleColor.Green); lock (mQueuedTasksLock) { // Добавить задачу в очередь задач на выполнение. mQueuedTasks.Add(lEntry); LogMessage( string.Format( "В очередь добавлена задача с приоритетом {0}", lEntry.TaskPriority), ConsoleColor.Green); // Поднять барьер доступа к очереди задач. LogMessage("Поднять барьер доступа к очереди задач.", ConsoleColor.DarkRed); } lock (mTaskSchedulerLock) { // Сигнализировать об изменении в условии блокировки по mTaskSchedulerLock. Monitor.Pulse(mTaskSchedulerLock); } }
/// <summary> /// Инициализирует новый экземпляр элемента списка задач задачей и её приоритетом. /// </summary> /// <param name="aTask"> /// Задача. /// </param> /// <param name="aTaskPriority"> /// Приоритет задачи. /// </param> public TaskListEntry(Task_INCORRECT aTask, TaskPriority aTaskPriority) { mTask = aTask; mTaskPriority = aTaskPriority; }
/// <summary> /// Ставит задачу <paramref name="aTask"/> в очередь на выполнение с приоритетом /// <paramref name="aTaskPriority"/>. /// </summary> /// <param name="aTask"> /// Задача для постановки в очередь на выполнения.. /// </param> /// <param name="aTaskPriority"> /// Приоритет задачи. /// </param> /// <returns> /// <see langword="true"/> - задача поставлена в очередь на выполнение. /// <see langword="false"/> - задача не была поставлена в очередь на выполнение, так как /// работа пула потока была остановлена. /// </returns> /// <exception cref="ArgumentNullException"> /// Задача для постановки в очередь на выполнения не задана. /// </exception> public bool Execute(Task_INCORRECT aTask, TaskPriority aTaskPriority) { if (aTask == null) { throw new ArgumentNullException( "aTask", "Задача для постановки в очередь на выполнения не задана."); } LogMessage("Получена новая задача для выполнения."); lock (mIsStoppedLock) { if (IsStopped) { // Запрошена остановка. LogPriority(aTaskPriority, ConsoleColor.DarkGray); // Отклонять новые задачи. return false; } } // Добавить задачу в очередь. EnqueueTask(aTask, aTaskPriority); LogMessage("Задача добавлена в очередь задач.", ConsoleColor.DarkYellow); return true; }