Example #1
0
 private void Work()
 {
     do
     {
         // запускаем проверку на завершенные потоки
         if (threadQueue.Count != 0)
         {
             List <int> li = new List <int>();
             int        i  = 0;
             foreach (var threadTask in threadQueue)
             {
                 // определяем есть ли завершенные потоки
                 if (TaskStatus.RanToCompletion == threadTask.task.Status)
                 {
                     li.Add(i);
                 }
                 i++;
             }
             if (li.Count != 0)
             {
                 // удаляем завершенные потоки из рабочей очереди
                 DeleteExampleThread(li);
             }
             //если есть новый поток, добавляем его в рабочую очередь
             if (HaveNewTask())
             {
                 ExampleTask exampleTask = ReturnNextTask();
                 exampleTask.Execute();
                 threadQueue.Add(exampleTask);
             }
         }
         else
         {
             if (HaveNewTask())
             {
                 ExampleTask exampleTask = ReturnNextTask();
                 exampleTask.Execute();
                 threadQueue.Add(exampleTask);
             }
         }
         Thread.Sleep(100);
         Console.WriteLine("High={0},Normal={1},Low={2},threadQueue={3}", highPriority.Count, normalPriority.Count, lowPriority.Count, threadQueue.Count);
     } while (stop != false || threadQueue.Count != 0);
     Console.WriteLine("End");
 }
Example #2
0
        private void EnterExampleTask(ExampleTask exTask)
        {
            switch (exTask.priority)
            {
            case Priority.HIGH:
                highPriority.Enqueue(exTask);
                break;

            case Priority.NORMAL:
                normalPriority.Enqueue(exTask);
                break;

            case Priority.LOW:
                lowPriority.Enqueue(exTask);
                break;

            default:
                break;
            }
        }
Example #3
0
        //добавление потока в очередь
        private void EnterTask(ExampleTask exTask)
        {
            // в зависимости от приоритета добавляем в соответствующую очередь
            switch (exTask.priority)
            {
            case Priority.HIGH:
            {
                highPriority.Enqueue(exTask);
                break;
            }

            case Priority.NORMAL:
            {
                normalPriority.Enqueue(exTask);
                break;
            }

            case Priority.LOW:
            {
                lowPriority.Enqueue(exTask);
                break;
            }
            }
        }