Files
BabyVideoService/Core/TaskRunner.cs
2026-02-08 16:58:32 +08:00

54 lines
1.3 KiB
C#

using NBC;
namespace ACBuildService;
/// <summary>
/// 默认任务执行器
/// </summary>
public class TaskRunner : Runner
{
private static TaskRunner mUpdateRunner;
public static TaskRunner Scheduler => mUpdateRunner ??= new TaskRunner();
private readonly List<IProcess> _updateRoutines = new List<IProcess>();
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<IProcess> 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--;
}
}
}
}
}