예제 #1
0
 public void StartDownload(QueuedDownload download, bool resume = false, bool forceNow = false)
 {
     if (queuedDownloads.Contains(download) || startedDownloads.Keys.Contains(download))
     {
         return;
     }
     if (resume)
     {
         queuedDownloads.Insert(0, download);
     }
     else if (!forceNow)
     {
         queuedDownloads.Add(download);
         _downloadEnqueuedEvent.OnNext(download);
     }
     if (forceNow)
     {
         QueuedDownload nextDownload = null;
         if (startedDownloads.Count >= KMaxSimultaneousDownloads)
         {
             nextDownload = startedDownloads.Keys.First();
         }
         IDownloadCancelHandle cancelHandle = StartEnqueuedDownload(download);
         startedDownloads.Add(download, cancelHandle);
         if (nextDownload != null)
         {
             StopDownload(nextDownload, true);
         }
     }
     else
     {
         StartEnqueuedItemsIfPossible();
     }
 }
예제 #2
0
 private void StartEnqueuedItemsIfPossible()
 {
     while (startedDownloads.Count < KMaxSimultaneousDownloads && queuedDownloads.Count > 0)
     {
         QueuedDownload        download     = queuedDownloads.PopFirst();
         IDownloadCancelHandle cancelHandle = StartEnqueuedDownload(download);
         startedDownloads.Add(download, cancelHandle);
     }
 }