private IEnumerator BeginLoad(string url)
        {
            Debug.Log(url);

            PackageResourceWWWElement loader = new PackageResourceWWWElement(url);

            yield return(loader);

            if (!string.IsNullOrEmpty(loader.GetError()))
            {
                Exception e = new Exception(loader.GetError());
                loader.GetRequest().Dispose();
                // done with error
                if (null != m_DoneCallback)
                {
                    m_DoneCallback(null, e);
                }
                yield break;
            }
            if (null != m_DoneCallback)
            {
                m_DoneCallback(loader.GetRequest().text, null);
                loader.GetRequest().Dispose();
            }
        }
        private IEnumerator BeginLoad(PackageResourceLoaderElement taskElem)
        {
            Debug.Log(taskElem.GetUrl());
            PackageResourceWWWElement loader = new PackageResourceWWWElement(taskElem.GetUrl());

            yield return(loader);

            // update loader count
            --m_iCurrentLoaderCount;

            if (m_bIsCrash)
            {
                loader.GetRequest().Dispose();

                if (m_iCurrentLoaderCount == 0)
                {
                    m_bIsRunning = false;
                }
            }
            else
            {
                OnOneTaskDone(taskElem, loader);
            }
        }
        private void OnOneTaskDone(PackageResourceLoaderElement taskElem, PackageResourceWWWElement request)
        {
            do
            {
                if (request.GetError() != null)
                {
                    taskElem.SetErrorInfo(request.GetError());
                    // release www
                    request.GetRequest().Dispose();

                    // add to error list
                    m_TaskErrorQueue.Enqueue(taskElem);
                    break;
                }
                // check www content
                if (null == request.GetRequest().bytes)
                {
                    taskElem.SetErrorInfo("load error");

                    // release www
                    request.GetRequest().Dispose();

                    // add to error list
                    m_TaskErrorQueue.Enqueue(taskElem);
                    break;
                }
                try
                {
                    byte[] content = request.GetRequest().bytes;
                    if (null != m_Decompressor)
                    {
                        // decompress
                        content = m_Decompressor.Decompress(content);
                    }
                    // ensure folder
                    PackageResourceTool.EnsureFolder(taskElem.GetOutputPath());

                    // try write byte files
                    System.IO.File.WriteAllBytes(taskElem.GetOutputPath(), content);

                    // add to succeed list
                    m_TaskSucceedQueue.Enqueue(taskElem);
                }
                catch (Exception e)
                {
                    // mark error msg
                    taskElem.SetErrorInfo(e.Message);

                    // release www
                    request.GetRequest().Dispose();

                    // add to error list
                    m_TaskErrorQueue.Enqueue(taskElem);

                    // check is need crash
                    m_bIsCrash = true;
                    CallbackWithError();
                    return;
                }
            }while (false);

            // check next
            CheckNext(taskElem);
        }