public static bool IsCached(int id, bool anime, ref string url) { if (anime) { if (CachedAnimeImages.ContainsKey(id)) { url = CachedAnimeImages[id]; return(true); } } else { if (CachedAnimeImages.ContainsKey(id)) { url = CachedAnimeImages[id]; return(true); } } return(false); }
public static async Task <string> GetImageUrl(int id, bool anime) { if (anime) { lock (CachedAnimeImages) { if (CachedAnimeImages.ContainsKey(id)) { return(CachedAnimeImages[id]); } } } else { lock (CachedMangaImages) { if (CachedMangaImages.ContainsKey(id)) { return(CachedMangaImages[id]); } } } var task = anime ? AnimeImageTasks[id] : MangaImageTasks[id]; if (task == null) { task = new AnimeImageQuery(id, anime).FetchImageUrl(); if (anime) { AnimeImageTasks[id] = task; } else { MangaImageTasks[id] = task; } await _semaphore.WaitAsync(); var link = await task; _semaphore.Release(); if (anime) { lock (CachedAnimeImages) { if (!CachedAnimeImages.ContainsKey(id)) { CachedAnimeImages.Add(id, link); } if (AnimeImageTasks.ContainsKey(id)) { AnimeImageTasks.Remove(id); } } } else { lock (CachedMangaImages) { if (!CachedMangaImages.ContainsKey(id)) { CachedMangaImages.Add(id, link); } if (MangaImageTasks.ContainsKey(id)) { MangaImageTasks.Remove(id); } } } return(link); } else { var sem = new SemaphoreSlim(0); await task.ContinueWith(task1 => sem.Release()); await Task.Delay(10); if (anime) { lock (CachedAnimeImages) { if (CachedAnimeImages.ContainsKey(id)) { return(CachedAnimeImages[id]); } } } else { lock (CachedMangaImages) { if (CachedMangaImages.ContainsKey(id)) { return(CachedMangaImages[id]); } } } return(null); } }