using System;
using Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.Config;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
///
/// Config 异步扩展方法
///
public static class ConfigAsyncExtension
{
///
/// 异步加载配置
///
/// 配置组件
/// 配置资源名称
/// 用户自定义数据
/// 超时时间(秒),0表示不超时
/// 加载成功事件
public static UniTask LoadConfigAsync(this ConfigComponent configComponent,
string configAssetName,
object userData = null,
float timeout = 30f)
{
UniTask waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync(
LoadConfigSuccessEventArgs.EventId,
LoadConfigFailureEventArgs.EventId,
successArgs => successArgs.ConfigAssetName == configAssetName && ReferenceEquals(successArgs.UserData, userData),
failureArgs => failureArgs.ConfigAssetName == configAssetName && ReferenceEquals(failureArgs.UserData, userData),
timeout
);
configComponent.ReadData(configAssetName, userData);
return waitTask;
}
///
/// 异步加载配置(通过字典加载)
///
/// 配置组件
/// 字典名称
/// 用户自定义数据
/// 超时时间(秒),0表示不超时
/// 加载成功事件
public static UniTask LoadConfigFromDictionaryAsync(this ConfigComponent configComponent,
string dictionaryName,
object userData = null,
float timeout = 30f)
{
UniTask waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync(
LoadConfigSuccessEventArgs.EventId,
LoadConfigFailureEventArgs.EventId,
successArgs => successArgs.ConfigAssetName == dictionaryName && ReferenceEquals(successArgs.UserData, userData),
failureArgs => failureArgs.ConfigAssetName == dictionaryName && ReferenceEquals(failureArgs.UserData, userData),
timeout
);
configComponent.ReadData(dictionaryName, userData);
return waitTask;
}
}
}