private IEnumerator LoadAssetsAsync(AssetsRequest request)
        {
            request.status = RequestStatus.Loading;

            yield return(LoadAssetsDependenciesAsync(request.path));

            if (caches.ContainsKey(request.path))
            {
                request.callback?.Invoke(caches[request.path]);

                request.status = RequestStatus.Complete;

                LoadAssetsAsync();
            }
            else
            {
                yield return(loader.LoadAssetsAsync(request.path, (response) =>
                {
                    caches.Add(request.path, response);

                    request.callback?.Invoke(response);

                    request.status = RequestStatus.Complete;

                    LoadAssetsAsync();
                }));
            }
        }
        public void LoadAsync(string path, Action <AssetsResponse> callback)
        {
            AssetsRequest request = requests.Find(x => x.path == path);

            if (request != null)
            {
                request.callback += callback;
            }
            else
            {
                requests.Add(new AssetsRequest()
                {
                    path     = path,
                    callback = callback,
                    status   = RequestStatus.Ready,
                });
                LoadAssetsAsync();
            }
        }