public void LoadAsync <T>(string path, Action <T> callback, string assetName) where T : UnityEngine.Object
        {
            if (_loadingAsset.ContainsKey(path.GetHashCode()))
            {
                _loadingAsset[path.GetHashCode()].callback += (Action <UnityEngine.Object>)callback;
                return;
            }

            AsyncLoadTask asyncLoadTask = new AsyncLoadTask();

            asyncLoadTask.callback += (Action <UnityEngine.Object>)callback;

            Coroutine coroutine = CoroutineTool.Instance.StartCoroutine(LoadAsync <T>(path, assetName, asyncLoadTask));

            asyncLoadTask.coroutine = coroutine;

            //_loadingAsset.Add(path.GetHashCode(), coroutine);
        }
        private IEnumerator LoadAsync <T>(string path, string assetName, AsyncLoadTask asyncLoadTask) where T : UnityEngine.Object
        {
            yield return(LoadOneAsync <T>(path));

            AssetBundleInfo assetBundleInfo;

            if (_curAllBundleInfos.TryGetValue(path.GetHashCode(), out assetBundleInfo))
            {
                if (string.IsNullOrEmpty(assetName))
                {
                    asyncLoadTask.callback?.Invoke(assetBundleInfo.As <T>());
                }
                else
                {
                    asyncLoadTask.callback?.Invoke(assetBundleInfo.GetOneAsset <T>(assetName));
                }
            }
            else
            {
                asyncLoadTask.callback?.Invoke(null);
            }

            _loadingAsset.Remove(path.GetHashCode());
        }