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); }
private void HandleLoadingCancel <TResource>(TWorker worker, LoadingOperation <TResource> loadingOperation) where TResource : class { worker.UnregisterLoadingOperation(loadingOperation); }