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);
            }
        }