public bool CancelLoadAsset(ResObj resObj) { AsyncLoadResTask task = null; if (loadingAssetTaskDic.TryGetValue(resObj.CRC, out task)) { for (int i = task.FinishActionList.Count; i >= 0; --i) { var action = task.FinishActionList[i]; if (action != null && task.Param is ResObj && task.Param == resObj) { action.Reset(); asyncFinishActionPool.Recycle(action); task.FinishActionList.Remove(action); } } if (task.FinishActionList.Count == 0) { loadingAssetTaskDic.Remove(resObj.CRC); loadingAssetTaskList[(int)task.Priority].Remove(task); task.Reset(); asyncLoadTaskPool.Recycle(task); } return(true); } return(false); }
public void AsyncLoadAsset(string path, Action <string, Object, object> finishAction, ResPriority priority, bool isSprite = false, object param = null) { if (string.IsNullOrEmpty(path)) { return; } if (finishAction == null) { Debug.LogWarningFormat("load {0} finishAction is null", path); return; } var crc = CRC32.GetCRC32(path); var cacheItem = GetCacheResItem(crc); if (cacheItem != null) { finishAction(path, cacheItem.obj, param); return; } AsyncLoadResTask task = null; if (!loadingAssetTaskDic.TryGetValue(crc, out task)) { task = asyncLoadTaskPool.Spawn(true); task.CRC = crc; task.Path = path; task.IsSprite = isSprite; task.Priority = priority; loadingAssetTaskDic.Add(crc, task); loadingAssetTaskList[(int)priority].Add(task); } var aFinishAction = asyncFinishActionPool.Spawn(true); aFinishAction.FinishAction = finishAction; aFinishAction.Param = param; task.FinishActionList.Add(aFinishAction); }