Exemple #1
0
        void Run()
        {
            Console.WriteLine("task {0} started===================+++++++++++++++++++++++", this.ID);
            FireTaskStarted(this, new TaskEventArg(this));
            EmbedActivityRunContext context = new EmbedActivityRunContext();

            for (int i = 0; i < this.Activities.Length; i++)
            {
                ScheduleActivity ac = this.Activities[i];
                currentActivity = ac;
                ac.ActualStart  = _scheduler.CurrentExecuteTime;
                ac.Status       = Status.Running;
                FireActivityStarted(this, new ActivityEventArg(ac));
                Console.WriteLine("task {0} activity {1} started", this.ID, ac.Name);
                LockResource(ac);
                context.SetData(ac);
                try{
                    ac.Execute(context);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    Console.WriteLine(e.StackTrace);
                }
                ac.ActualDuration = _scheduler.CurrentExecuteTime - ac.ActualStart;
                FreeResource(ac);
                //ac.Status = Status.Processed;
                ac.WaitingForCompleted = true;
                while (true)
                {
                    //检查下一个Activity是否可以开始,计算后便所有Activity的开始和结束时间
                    ScheduleActivity next       = ac.Next;
                    bool             canRunNext = CheckActivityStart(next);
                    if (canRunNext)
                    {
                        //是否提前结束
                        ac.Status = Status.Processed;
                        Console.WriteLine("task {0} activity {1} completed++", this.ID, ac.Name);
                        FireActivityCompleted(this, new ActivityEventArg(ac));
                        currentActivity = null;
                        break;
                    }
                    Thread.Sleep(100);
                }
            }
            Status = Status.Processed;
            Console.WriteLine("task {0}  completed+++++++++++++++++++++++", this.ID);
            FireTaskCompleted(this, new TaskEventArg(this));
        }
        void Run()
        {
            FireTaskStarted(this, new TaskEventArg(this));
            EmbedActivityRunContext context = new EmbedActivityRunContext();

            for (int i = 0; i < this.Activities.Length; i++)
            {
                ScheduleActivity ac = this.Activities[i];
                currentActivity = ac;
                ac.ActualStart  = Scheduler.CurrentExecuteTime;
                ac.Status       = Status.Running;
                FireActivityStarted(this, new ActivityEventArg(ac));
                LockResource(ac);
                context.SetData(ac);
                try{
                    ac.Execute(context);
                }
                catch (Exception e)
                {
                    CancelTask(ac);
                    return;
                }
                ac.ActualDuration = Scheduler.CurrentExecuteTime - ac.ActualStart;
                FreeResource(ac);
                //ac.Status = Status.Processed;
                ac.WaitingForCompleted = true;
                while (true)
                {
                    //检查下一个Activity是否可以开始,计算后便所有Activity的开始和结束时间
                    ScheduleActivity next       = ac.Next;
                    bool             canRunNext = Scheduler.CheckActivityStart(next);
                    if (canRunNext)
                    {
                        //是否提前结束
                        ac.Status = Status.Processed;
                        FireActivityCompleted(this, new ActivityEventArg(ac));
                        currentActivity = null;
                        break;
                    }
                    Thread.Sleep(100);
                }
            }
            Status = Status.Processed;
            FireTaskCompleted(this, new TaskEventArg(this));
        }