protected async UniTask <T> LoadAssetAsync <T>(string assetName, IProgress <float> progress = null,
                                                       CancellationToken token = default) where T : UnityEngine.Object
        {
            ProgressDispatcher.Handler handler = null;
            if (_ab == null)
            {
                handler  = ProgressDispatcher.instance.Create(progress);
                progress = handler.CreateProgress();
                _ab      = await AssetBundleLoader.instance.LoadByGuidAsync(_guid, handler.CreateProgress(), token);
            }

            var ret = await _ab.LoadAssetAsync <T>(assetName, progress, token);

            handler?.Dispose();
            return(ret);
        }
        public async UniTask <Scene> LoadAsync(LoadSceneMode loadSceneMode = LoadSceneMode.Additive,
                                               IProgress <float> progress  = null, CancellationToken token = default)
        {
            // todo 次数处理Progress的代码跟AssetReference中的有些重复,考虑重构
            ProgressDispatcher.Handler handler = null;
            if (_assetBundle == null)
            {
                handler      = ProgressDispatcher.instance.Create(progress);
                progress     = handler.CreateProgress();
                _assetBundle = await AssetBundleLoader.instance.LoadByGuidAsync(_guid, handler.CreateProgress(), token);
            }

            Scene scene = await _assetBundle.LoadSceneAsync(_assetName, loadSceneMode, progress);

            handler?.Dispose();
            return(scene);
        }