/// <summary> /// 任务管线的执行函数 /// </summary> public void Run() { //任务管线中无任务队列 if (Tasks.Count == 0) { //EditorUtility.DisplayDialog("提示", "任务管线中无任务队列!", "OK"); EndATBuildPipline();//重置相关属性 return; } //上次执行任务如果失败,直接返回,管线终止 if (LastTask == TaskStatus.Failure) { //EndATBuildPipline();//重置相关属性 OnReverseTasks(); return; } PiplineStatus = ATBuildPiplineStatus.Occupied; if (Tasks.Count > 0) { IBuildTask currentTask = Tasks.Peek(); switch (currentTask.Status) { case TaskStatus.None: { //只执行一次 currentTask.Status = TaskStatus.Start; _currentTask = currentTask; currentTask.OnStatusChanged(currentTask.Status); _lastTime = DateTime.Now; } break; case TaskStatus.Start: { //开始任务 if (OnRePaintWindow()) { //此处为了Repaint currentTask.Status = TaskStatus.Running; currentTask.OnReady(); currentTask.DoTask(); } } break; case TaskStatus.Running: { //和刷新的帧数一样 } break; case TaskStatus.Success: { //TODO currentTask.OnFinal(); currentTask = null; IBuildTask task = Tasks.Dequeue(); ExcutedTasks.Add(task); _currentTask = null; _currentTime = new DateTime(); _lastTime = new DateTime(); } break; case TaskStatus.Failure: { //TODO //任务失败 currentTask.OnFinal(); currentTask = null; LastTask = TaskStatus.Failure; _currentTime = new DateTime(); _lastTime = new DateTime(); } break; } } }