Exemple #1
0
        public ILoadingOperation <TResource> CreateLoadingWorkerAsync <TResource>(object owner, string uri) where TResource : class
        {
            ValidateInputData <TResource>(uri);

            if (IsCached(uri))
            {
                var resource = GetCachedResource <TResource>(owner, uri);
                return(LoadingOperation <TResource> .GetCompletedLoadingOperation(owner, uri, resource));
            }

            var worker = _workersQueue.GetExistResourceWorker <TWorker>(uri);

            if (worker == null)
            {
                worker = CreateWorker <TResource>(uri);
                _workersQueue.AddToQueue(worker);
            }

            var existLoadingOperation = worker.GetLoadingOperationByOwner(owner);

            if (existLoadingOperation != null)
            {
                return(existLoadingOperation as ILoadingOperation <TResource>);
            }

            var loadingOperation = new LoadingOperation <TResource>(owner, uri, loadOp => { HandleLoadingCancel(worker, loadOp); });

            worker.RegisterLoadingOperation(loadingOperation);
            return(loadingOperation);
        }
        public static LoadingOperation <T> GetCompletedLoadingOperation(object owner, string uri, T loadedResource)
        {
            var result = new LoadingOperation <T>(owner, uri, null);

            result.Resource    = loadedResource;
            result.IsCompleted = true;
            return(result);
        }
Exemple #3
0
 private void HandleLoadingCancel <TResource>(TWorker worker, LoadingOperation <TResource> loadingOperation)
     where TResource : class
 {
     worker.UnregisterLoadingOperation(loadingOperation);
 }