private void RemoveFromDownloadingNow(string id) { string result = id; if (!DownloadingNow.TryTake(out result)) { throw new Exception("An exception while removing from DownloadingNow"); } }
private async Task ManageDownloads() { try { if (DownloadingNow.Count < DegreeOfParallelism && DownloadQueue.Count > 0) { for (int i = 0; i < degreeOfParallelism - DownloadingNow.Count; i++) { string download; if (DownloadQueue.TryDequeue(out download)) { DownloadingNow.Add(download); } } } if (DownloadingNow.Count > 0) { var downloads = DownloadingNow.ToArray(); foreach (string id in downloads) { var download = GetFromAllDownloads(id); if (download.DownloadTask.Status == TaskStatus.RanToCompletion || download.DownloadTask.Status == TaskStatus.Faulted) { RemoveFromDownloadingNow(id); } if (download.DownloadTask.Status == TaskStatus.WaitingForActivation) { RunDownloadTask(download.DownloadTask); } } } } catch (Exception ex) { OnDownloaderException?.Invoke(ex); } }