static void Main(string[] args) { //Создадим пул потоков из 3-х потоков. FixedThreadPool testPool = new FixedThreadPool(3); Task tranquilityHigh = new Task(TranquilityHigh); Task tranquilityNormal = new Task(TranquilityNormal); Task tranquilityLow = new Task(TranquilityLow); Console.WriteLine("Before signal Stop"); Console.WriteLine("First tasks"); //Заполним очередь задачами с разными приоритетами. for (int i = 0; i < 4; i++) { testPool.Execute(tranquilityHigh, Priority.HIGH); testPool.Execute(tranquilityNormal, Priority.NORMAL); testPool.Execute(tranquilityLow, Priority.LOW); } //Дождемся пока очередь опустеет. Thread.Sleep(20000); //Добавим еще задач. Console.WriteLine("Second tasks"); for (int i = 0; i < 2; i++) { testPool.Execute(tranquilityHigh, Priority.HIGH); testPool.Execute(tranquilityNormal, Priority.NORMAL); testPool.Execute(tranquilityLow, Priority.LOW); } Console.WriteLine("Signal Stop"); //Подаем сигнал Stop. testPool.Stop(); Console.WriteLine("After signal Stop"); bool isStopped; //Пытаемся добавить задачи в очередь. for (int i = 0; i < 4; i++) { isStopped = testPool.Execute(tranquilityHigh, Priority.HIGH); Console.WriteLine("Execute() returns " + isStopped.ToString()); } //Даем время потокам завершить все задачи. Thread.Sleep(10000); //Снова запускаем работу очереди. testPool.Go(); Console.WriteLine("After signal Go"); //Пытаемся добавить задачи в очередь. for (int i = 0; i < 4; i++) { isStopped = testPool.Execute(tranquilityLow, Priority.LOW); Console.WriteLine("Execute() returns " + isStopped.ToString()); } //Даем время потокам завершить все задачи. Thread.Sleep(5000); Console.WriteLine("............ END .............."); }
/// <summary> /// Конструктор очереди задач. /// </summary> /// <param name="parent"> /// Ссылка на экземпляр родительского класса. /// </param> public PriorityQueue(FixedThreadPool parent) { _parent = parent; }