using NBC; namespace ACBuildService; /// /// 默认任务执行器 /// public class TaskRunner : Runner { private static TaskRunner mUpdateRunner; public static TaskRunner Scheduler => mUpdateRunner ??= new TaskRunner(); private readonly List _updateRoutines = new List(); public event Action OnUpdate; public TaskRunner() { Time.OnUpdate += Update; StartCoroutine(new RunnerProcess("TaskRunner", Coroutines, ReadyTask, FlushingOperation)); } private void StartCoroutine(IProcess process) { var routines = _updateRoutines; if (!routines.Contains(process)) { routines.Add(process); } } private void Update() { ExecuteRoutines(_updateRoutines); OnUpdate?.Invoke(); } private void ExecuteRoutines(List arr) { if (arr != null && arr.Count > 0) { for (var index = 0; index < arr.Count; index++) { var task = arr[index]; var st = task.Process(); if (st == NTaskStatus.Success) { arr.RemoveAt(index); index--; } } } } }