/// <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;
        }