| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | 
							- using System;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- using System.Threading.Tasks;
 
- using YooAsset;
 
- namespace GFGGame
 
- {
 
- 	public abstract class AsyncOperationBase : IEnumerator
 
- 	{
 
- 		// 用户请求的回调
 
- 		private Action<AsyncOperationBase> _callback;
 
- 		/// <summary>
 
- 		/// 状态
 
- 		/// </summary>
 
- 		public EOperationStatus Status { get; protected set; } = EOperationStatus.None;
 
- 		/// <summary>
 
- 		/// 错误信息
 
- 		/// </summary>
 
- 		public string Error { get; protected set; }
 
- 		/// <summary>
 
- 		/// 处理进度
 
- 		/// </summary>
 
- 		public float Progress { get; protected set; }
 
- 		/// <summary>
 
- 		/// 是否已经完成
 
- 		/// </summary>
 
- 		public bool IsDone
 
- 		{
 
- 			get
 
- 			{
 
- 				return Status == EOperationStatus.Failed || Status == EOperationStatus.Succeed;
 
- 			}
 
- 		}
 
- 		/// <summary>
 
- 		/// 完成事件
 
- 		/// </summary>
 
- 		public event Action<AsyncOperationBase> Completed
 
- 		{
 
- 			add
 
- 			{
 
- 				if (IsDone)
 
- 					value.Invoke(this);
 
- 				else
 
- 					_callback += value;
 
- 			}
 
- 			remove
 
- 			{
 
- 				_callback -= value;
 
- 			}
 
- 		}
 
- 		/// <summary>
 
- 		/// 异步操作任务
 
- 		/// </summary>
 
- 		public Task Task
 
- 		{
 
- 			get
 
- 			{
 
- 				if (_taskCompletionSource == null)
 
- 				{
 
- 					_taskCompletionSource = new TaskCompletionSource<object>();
 
- 					if (IsDone)
 
- 						_taskCompletionSource.SetResult(null);
 
- 				}
 
- 				return _taskCompletionSource.Task;
 
- 			}
 
- 		}
 
- 		internal abstract void Start();
 
- 		internal abstract void Update();
 
- 		internal void Finish()
 
- 		{
 
- 			Progress = 1f;
 
- 			_callback?.Invoke(this);
 
- 			if (_taskCompletionSource != null)
 
- 				_taskCompletionSource.TrySetResult(null);
 
- 		}
 
- 		/// <summary>
 
- 		/// 清空完成回调
 
- 		/// </summary>
 
- 		protected void ClearCompletedCallback()
 
- 		{
 
- 			_callback = null;
 
- 		}
 
- 		#region 异步编程相关
 
- 		bool IEnumerator.MoveNext()
 
- 		{
 
- 			return !IsDone;
 
- 		}
 
- 		void IEnumerator.Reset()
 
- 		{
 
- 		}
 
- 		object IEnumerator.Current => null;
 
- 		private TaskCompletionSource<object> _taskCompletionSource;
 
- 		#endregion
 
- 	}
 
- }
 
 
  |