- 使用TaskCompletionSource将委托回调形式的异步调用封装为await调用
以UGF的资源加载为例
调用这个接口
LoadAssetCallbacks loadAssetCallbacks = new LoadAssetCallbacks(
(string assetName, object asset, float duration, object userData) =>
{
},
(string assetName, LoadResourceStatus status, string errorMessage, object userData) =>
{
});
resourceComponent.LoadAsset(assetName, loadAssetCallbacks);
需要在LoadAssetCallbacks的LoadAssetSuccessCallback、LoadAssetFailureCallback编写加载成功、失败的代码
封装为await调用
public static Task<object> LoadAssetAsync2(this ResourceComponent resourceComponent, string assetName)
{
TaskCompletionSource<object> loadAssetTcs = new TaskCompletionSource<object>();
LoadAssetCallbacks loadAssetCallbacks = new LoadAssetCallbacks((string _assetName, object asset, float duration, object userData) =>
{
loadAssetTcs.SetResult(asset);
}, (string _assetName, LoadResourceStatus status, string errorMessage, object userData) =>
{
loadAssetTcs.SetException(new Exception(errorMessage));
});
resourceComponent.LoadAsset(assetName, null, 0, loadAssetCallbacks, null);
return loadAssetTcs.Task;
}
object asset = await GameEntry.Resource.LoadAssetAsync2("XXX/XXX.png");
使用TaskCompleti