HttpLoaderTask CreateDownloadTask()
    {
        HttpLoaderTask ret = null;

        if (mCachedLoadTask.Count > 0)
        {
            ret         = mCachedLoadTask.Dequeue();
            ret.enabled = true;
        }
        else
        {
            ret = mGameObject.AddComponent <HttpLoaderTask> ();
        }
        return(ret);
    }
    public int DownLoad(string url, System.Action <byte[]> hdlOnSuccess, System.Action <string> hdlOnError, System.Action <ulong> hdlProcess = null)
    {
        Logger.LogInfo("DownLoad " + url);
        DownLoadInfo downloadInfo = CreateDownloadInfo(url, hdlOnSuccess, hdlOnError, hdlProcess);

        if (mCurDownLoadTaskList.Count > ConstConfig.MaxHttpTask)
        {
            mWaitTaskList.Add(downloadInfo);
        }
        else
        {
            HttpLoaderTask downloader = CreateDownloadTask();
            mCurDownLoadTaskList.Add(downloader);
            downloader.BeginDownLoad(downloadInfo);
        }
        return(downloadInfo.taskId);
    }
    public void Update()
    {
        for (int i = mCurDownLoadTaskList.Count - 1; i >= 0; --i)
        {
            HttpLoaderTask task = mCurDownLoadTaskList [i];
            if (task.IsFinish)
            {
                if (null == task.Data)
                {
                    Logger.LogError(task.Error);
                    task.taskInfo.hdlOnError.Invoke(task.Error);
                }
                else
                {
                    task.taskInfo.hdlOnSuccess.Invoke(task.Data);
                }
                ReturnDownloadInfo(task.taskInfo);
                task.Clear();
                ReturnDownloadTask(task);
                mCurDownLoadTaskList.RemoveAt(i);
            }
            else
            {
                if (task.taskInfo.hdlProcess != null)
                {
                    task.taskInfo.hdlProcess.Invoke(task.DownloadedBytes);
                }
            }
        }

        if (mCurDownLoadTaskList.Count <= ConstConfig.MaxHttpTask && mWaitTaskList.Count > 0)
        {
            HttpLoaderTask downloader = CreateDownloadTask();
            downloader.BeginDownLoad(mWaitTaskList[0]);
            mCurDownLoadTaskList.Add(downloader);
            mWaitTaskList.RemoveAt(0);
        }
    }
 void ReturnDownloadTask(HttpLoaderTask task)
 {
     task.enabled = false;
     mCachedLoadTask.Enqueue(task);
 }