/// <summary>
        /// Stop all loading tasks, and release all references.(immediately)
        /// </summary>
        public AssetManagementTool Shutdown(bool unloadUnusedAssets = false)
        {
            ActionSequence.Clear();

            if (Working)
            {
                if (m_WorkingCoroutine != null)
                {
                    m_WorkingCoroutine.StopCoroutine();
                }
                Working = false;
            }
            m_WorkingCoroutine = null;

            if (m_LoadingTasks != null)
            {
                m_LoadingTasks.UnspawnLoadingTasks();
                m_LoadingTasks = null;
            }

            while (m_CachedLoadingTasks.Count > 0)
            {
                var list = m_CachedLoadingTasks.Dequeue();
                if (list != null)
                {
                    list.UnspawnLoadingTasks();
                }
            }
            m_CachedLoadingCallbacks.Clear();

            foreach (var kvp in m_LoadedAssets)
            {
                kvp.Value.Release(true);
                AssetRefer.Unspawn(kvp.Value);
            }
            foreach (var kvp in m_LoadedAssetBundles)
            {
                kvp.Value.Release(true);
                AssetBundleRefer.Unspawn(kvp.Value);
            }
            m_LoadedAssets.Clear();
            m_LoadedAssetBundles.Clear();

            if (unloadUnusedAssets)
            {
                Resources.UnloadUnusedAssets();
            }
            return(this);
        }