/// <summary>
        /// 异步加载资源
        /// </summary>
        /// <param name="path"></param>
        /// <param name="name"></param>
        /// <param name="callBack"></param>
        public void LoadAsync <T>(string path, System.Action <T> callBack) where T : Object
        {
            if (path.Substring(0, 4) == "Res/")
            {
                path = path.Substring(4, path.Length - 4);
                ResLoadTask <T> resTask = new ResLoadTask <T>(Resources.LoadAsync(path), callBack);
                m_TaskPool.Add(resTask);
            }
#if AB
            var temp = Utility.Text.SplitPathName(path);

            // 同步加载AB包
            //ABLoadTask<T> abTask = new ABLoadTask<T>(GetAssetBundle(temp[0]).LoadAssetAsync(temp[1]), callBack);
            //m_TaskPool.Add(abTask);

            // 异步加载AB包
            GetAssetBundleAsync(temp[0], (ab) =>
            {
                ABLoadTask <T> abTask = new ABLoadTask <T>(ab.LoadAssetAsync(temp[1]), callBack);
                m_TaskPool.Add(abTask);
            });
#else
            T obj = LoadWithADB <T>(path);
            callBack(obj);
#endif
        }
    public void Update()
    {
        ILoader loader = GetIdleResourcesLoader();

        if (loader == null)
        {
            return;
        }

        ResLoadTask task = DequeueLoadTask();

        loader.PrepareLoad(task.m_resType, task.m_name);
        loader.StartLoad();
    }
    public void AppendLoadTaskAsync(EResourcesType resType, string resName, Action <ResourceInfo> callBack)
    {
        ResLoadTask task = new ResLoadTask(resName, resType, ELoadSpeedType.Normal, callBack);

        m_laodTaskQueue.Enqueue(task);
    }