using System; using Cysharp.Threading.Tasks; using GameFramework; using GameFramework.DataTable; using SepCore.DataTable; using UnityGameFramework.Runtime; namespace SepCore.AsyncTask { /// /// DataTable 异步扩展方法 /// public static class DataTableAsyncExtension { /// /// 异步加载数据表 /// /// 数据表组件 /// 数据表资源名称 /// 用户自定义数据 /// 超时时间(秒),0表示不超时 /// 加载成功事件 public static UniTask LoadDataTableAsync(this DataTableComponent dataTableComponent, string dataTableAssetName, object userData = null, float timeout = 30f) { UniTask waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync( LoadDataTableSuccessEventArgs.EventId, LoadDataTableFailureEventArgs.EventId, successArgs => successArgs.DataTableAssetName == dataTableAssetName && ReferenceEquals(successArgs.UserData, userData), failureArgs => failureArgs.DataTableAssetName == dataTableAssetName && ReferenceEquals(failureArgs.UserData, userData), timeout ); string dataTableName = System.IO.Path.GetFileNameWithoutExtension(dataTableAssetName); dataTableComponent.LoadDataTable(dataTableName, dataTableAssetName, userData); return waitTask; } /// /// 异步加载数据表(泛型版本) /// /// 数据行类型 /// 数据表组件 /// 数据表资源名称 /// 用户自定义数据 /// 超时时间(秒),0表示不超时 /// 加载的数据表 public static UniTask> LoadDataTableAsync(this DataTableComponent dataTableComponent, string dataTableAssetName, object userData = null, float timeout = 30f) where T : IDataRow { return LoadDataTableAsync(dataTableComponent, dataTableAssetName, userData, timeout) .ContinueWith(successArgs => { // 获取数据表名称(去掉路径和扩展名) string dataTableName = System.IO.Path.GetFileNameWithoutExtension(dataTableAssetName); return dataTableComponent.GetDataTable(dataTableName); }); } } }