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"); }
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; } }
//добавление потока в очередь 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; } } }