示例#1
0
        //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)он не видит ни каких исключений, выдаёт коды ошибок
        }