像Unity的Async函数和普通的异步函数有什么区别? 会在什么时候调用?内部使用的是协程吗?
例如我使用Addressables.LoadAssetsAsync,假如我在Update里的第一帧调用了一次,这个时候它会怎么加载?
假如我第三帧又调用了一次 但是这个时候资源还没加载完成 我就添加了一个Completed监听函数 如果在添加的过程中 资源加载好了 就会造成代码逻辑上的错误
例如我进入If(AsyncOperationHandler.isDone)判断后的语句块时 它还没有完成 但是我判断完之后 加载完成了 这个时候再添加监听函数还有用吗 所以Unity Async函数实现的底层逻辑是什么 我觉得只有协程可以避免这种问题吧
所以Unity的Async和它的生命周期有什么关系?
if (resDic.ContainsKey(keyName))
{
handle = resDic[keyName].handle.Convert<IList<T>>();
resDic[keyName].count += 1;
if (handle.IsDone)
{
foreach (T item in handle.Result)
callBack(item);
}
else
{
handle.Completed += (obj) =>
{
if(obj.Status == AsyncOperationStatus.Succeeded)
{
foreach (T item in handle.Result)
}
};
}
return;
}
handle = Addressables.LoadAssetsAsync<T>(list, callBack, mode);
handle.Completed += (obj) =>
{
if(obj.Status == AsyncOperationStatus.Failed)
{
Debug.LogError("资源加载失败" + keyName);
if (resDic.ContainsKey(keyName))
resDic.Remove(keyName);
}
};
AddressablesInfo info = new AddressablesInfo(handle);
resDic.Add(keyName, info);