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