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)); }