public static async Task <List <RemoteImageInfo> > GetImagesSizeAndValidate(IEnumerable <RemoteImageInfo> images, CancellationToken cancellationToken) { var result = new List <RemoteImageInfo>(); var tasks = new List <Task <RemoteImageInfo> >(); var cleanImages = Cleanup(images); var primaryList = cleanImages.Where(o => o.Type == ImageType.Primary).ToList(); var backdropList = cleanImages.Where(o => o.Type == ImageType.Backdrop).ToList(); var dublList = new List <RemoteImageInfo>(); foreach (var image in primaryList) { tasks.Add(GetImageSizeAndValidate(image, cancellationToken)); } foreach (var image in backdropList) { if (!primaryList.Where(o => o.Url == image.Url).Any()) { tasks.Add(GetImageSizeAndValidate(image, cancellationToken)); } else { dublList.Add(image); } } try { await Task.WhenAll(tasks).ConfigureAwait(false); } catch (Exception e) { Logger.Error($"GetImagesSizeAndValidate error: \"{e}\""); await Analytics.Send(null, null, null, null, null, null, e, cancellationToken).ConfigureAwait(false); } finally { foreach (var task in tasks) { var res = task.Result; if (res != null) { result.Add(res); } } } if (result.Any()) { foreach (var image in dublList) { var res = result.Where(o => o.Url == image.Url); if (res.Any()) { var img = res.First(); result.Add(new RemoteImageInfo { ProviderName = image.ProviderName, Url = image.Url, Type = ImageType.Backdrop, Height = img.Height, Width = img.Width, }); } } } return(result); }