//public static Task task2; //public static ManualResetEvent a = new ManualResetEvent(false); static void Main(string[] args) { //Action action= new Action(MyFiberProcess.Start); //task2 = new Task(action); for (int i = 0; i < 2; i++) { MyQueue.Push(new Task()); } MyFiberProcess main = new MyFiberProcess(); main.Exit += Exit; Fiber FiberFirst = new Fiber(main.Start); MyQueue.MainFiber = FiberFirst.Id; main.Start(); }
public void Start() { // try { while (MyQueue.queue.Count() > 0) { Task task = MyQueue.Get(); if (MyQueue.WorkIn() == null) { Console.WriteLine("Произошёл первый вызов распределительного файбера!"); } else { if (MyQueue.WorkIn().IsComplete) { Fiber.Delete(MyQueue.WorkIn().fiberID); } else { MyQueue.Push(MyQueue.WorkIn()); } } MyQueue.SetWorkIn(task); if (task.IsWork) { Fiber.Switch(task.fiberID); } else { Fiber fiber = new Fiber(task.process.Run); task.fiberID = fiber.Id; task.IsWork = true; Fiber.Switch(task.fiberID); } } //Thread.Sleep(10000); // if (MyQueue.first) Console.WriteLine("Главный файбер вышел из цикла раздачи в методе!!!"); Console.ReadKey(); Exit(); //можно и так валить прогу //можно также просто вызывать метод System.Environment.Exit(0); // Process.GetCurrentProcess().Kill(); } //catch(Exception)он не видит ни каких исключений, выдаёт коды ошибок }