/// <summary>
    /// 更新主逻辑,用于执行Load队列
    /// </summary>
    void Update()
    {
        if (mLoadingRequest.Count > 0)
        {
            for (int i = mLoadingRequest.Count - 1; i >= 0; i--)
            {
                if (mLoadingRequest[i].IsDone)
                {
                    Debug.Log(mLoadingRequest[i].assetName + " is done");
                    ResRequestInfo info  = mLoadingRequest[i];
                    AssetInfo      aInfo = new AssetInfo();
                    aInfo.asset          = info.Asset;
                    aInfo.IsKeepInMemory = info.IsKeepInMemory;
                    aInfo.name           = info.assetName;

                    info.SendEvent(EventDef.LoadAssetFinished, aInfo);
                    mLoadingRequest.RemoveAt(i);
                    Destroy(info);
                }
            }
        }

        if (mLoadingRequest.Count < SystemInfo.processorCount && mWaiting.Count > 0)
        {
            ResRequestInfo info = mWaiting.Dequeue();
            mLoadingRequest.Add(info);
            Debug.Log("mWaiting dequeue :" + info.assetName);
            info.LoadAsync();
        }
    }
    /// <summary>
    /// 异步加载
    /// </summary>
    /// <param name="assetName"></param>
    /// <param name="listener"></param>
    /// <param name="type"></param>
    /// <param name="isKeepInmemory"></param>
    private void _loadAsync(string assetName, IEventListener listener = null, Type type = null,
                            bool isKeepInmemory = false)
    {
        foreach (ResRequestInfo info in mLoadingRequest)
        {
            if (info.assetName == assetName)
            {
                info.AddEventListener(EventDef.LoadAssetFinished, listener);
                return;
            }
        }

        foreach (ResRequestInfo i in mWaiting)
        {
            if (i.assetName == assetName)
            {
                i.AddEventListener(EventDef.LoadAssetFinished, listener);
                return;
            }
        }

        ResRequestInfo requestInfo = requestInfoContainer.AddComponent <ResRequestInfo>();

        requestInfo.assetName = assetName;
        requestInfo.AddEventListener(EventDef.LoadAssetFinished, listener);
        requestInfo.AddEventListener(EventDef.LoadAssetFinished, this);
        requestInfo.IsKeepInMemory = isKeepInmemory;
        requestInfo.type           = type;
        if (assetPathDic.ContainsKey(assetName))
        {
            requestInfo.loadType = LoadType.assetBundleLoad;
        }
        else
        {
            requestInfo.loadType = LoadType.resourceLoad;
        }
        mWaiting.Enqueue(requestInfo);
    }