public static async Task <TaskRequest> GetTexture(string url, ITextureResultListener listener) { var filePath = path + "/" + url.GetHashCode(); if (pendingRequests.ContainsKey(filePath)) //Return pending task if any in progress { var rq = pendingRequests[filePath]; rq.AddListener(listener); await rq.Task; return(rq); } var request = new TaskRequest(GetTextureTask(url, filePath), listener); if (pendingRequests.ContainsKey(filePath)) { return(null); } pendingRequests.Add(filePath, request); await request.Task; pendingRequests.Remove(filePath); return(request); }
public void AddListener(ITextureResultListener listener) { Listeners.Add(listener.Id); }
public void RemoveListener(ITextureResultListener textureDownloader) { Listeners.Remove(textureDownloader.Id); }
public TaskRequest(Task <GetTextureResult> task, ITextureResultListener listener) { Task = task; AddListener(listener); }