using System.Collections; using System.Collections.Generic; using System.Diagnostics; namespace GFGGame { internal class OperationSystem { private static readonly List _operations = new List(100); private static readonly List _addList = new List(100); private static readonly List _removeList = new List(100); // 计时器相关 private static Stopwatch _watch; private static long _frameTime; /// /// 异步操作的最小时间片段 /// public static long MaxTimeSlice { set; get; } = long.MaxValue; /// /// 处理器是否繁忙 /// public static bool IsBusy { get { return _watch.ElapsedMilliseconds - _frameTime >= MaxTimeSlice; } } /// /// 初始化异步操作系统 /// public static void Initialize() { _watch = Stopwatch.StartNew(); } /// /// 更新异步操作系统 /// public static void Update() { _frameTime = _watch.ElapsedMilliseconds; // 添加新的异步操作 if (_addList.Count > 0) { for (int i = 0; i < _addList.Count; i++) { var operation = _addList[i]; _operations.Add(operation); } _addList.Clear(); } // 更新所有的异步操作 foreach (var operation in _operations) { if (IsBusy) break; operation.Update(); if (operation.IsDone) { _removeList.Add(operation); operation.Finish(); } } // 移除已经完成的异步操作 if (_removeList.Count > 0) { foreach (var operation in _removeList) { _operations.Remove(operation); } _removeList.Clear(); } } /// /// 销毁异步操作系统 /// public static void DestroyAll() { _operations.Clear(); _addList.Clear(); _removeList.Clear(); _watch = null; _frameTime = 0; MaxTimeSlice = long.MaxValue; } /// /// 开始处理异步操作类 /// public static void StartOperation(AsyncOperationBase operation) { _addList.Add(operation); operation.Start(); } } }