| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | 
							- using System.Collections;
 
- using System.Collections.Generic;
 
- using System.Diagnostics;
 
- namespace GFGGame
 
- {
 
- 	internal class OperationSystem
 
- 	{
 
- 		private static readonly List<AsyncOperationBase> _operations = new List<AsyncOperationBase>(100);
 
- 		private static readonly List<AsyncOperationBase> _addList = new List<AsyncOperationBase>(100);
 
- 		private static readonly List<AsyncOperationBase> _removeList = new List<AsyncOperationBase>(100);
 
- 		// 计时器相关
 
- 		private static Stopwatch _watch;
 
- 		private static long _frameTime;
 
- 		/// <summary>
 
- 		/// 异步操作的最小时间片段
 
- 		/// </summary>
 
- 		public static long MaxTimeSlice { set; get; } = long.MaxValue;
 
- 		/// <summary>
 
- 		/// 处理器是否繁忙
 
- 		/// </summary>
 
- 		public static bool IsBusy
 
- 		{
 
- 			get
 
- 			{
 
- 				return _watch.ElapsedMilliseconds - _frameTime >= MaxTimeSlice;
 
- 			}
 
- 		}
 
- 		/// <summary>
 
- 		/// 初始化异步操作系统
 
- 		/// </summary>
 
- 		public static void Initialize()
 
- 		{
 
- 			_watch = Stopwatch.StartNew();
 
- 		}
 
- 		/// <summary>
 
- 		/// 更新异步操作系统
 
- 		/// </summary>
 
- 		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();
 
- 			}
 
- 		}
 
- 		/// <summary>
 
- 		/// 销毁异步操作系统
 
- 		/// </summary>
 
- 		public static void DestroyAll()
 
- 		{
 
- 			_operations.Clear();
 
- 			_addList.Clear();
 
- 			_removeList.Clear();
 
- 			_watch = null;
 
- 			_frameTime = 0;
 
- 			MaxTimeSlice = long.MaxValue;
 
- 		}
 
- 		/// <summary>
 
- 		/// 开始处理异步操作类
 
- 		/// </summary>
 
- 		public static void StartOperation(AsyncOperationBase operation)
 
- 		{
 
- 			_addList.Add(operation);
 
- 			operation.Start();
 
- 		}
 
- 	}
 
- }
 
 
  |