Channel9Downloader.DataAccess.DownloadManager.StartDownloads C# (CSharp) Method

StartDownloads() public method

Starts downloads.
public StartDownloads ( ) : void
return void
        public void StartDownloads()
        {
            IDownloadItem downloadItem;
            while (_numberOfRunningDownloads < _settings.MaximumParallelDownloads
                && (downloadItem = GetNextDownload()) != null)
            {
                _numberOfRunningDownloads++;

                if (_numberOfRunningDownloads == 1)
                {
                    RaiseDownloadingStarted(new EventArgs());
                }

                _downloadQueue.Remove(downloadItem);

                var cancellationTokenSource = new CancellationTokenSource();
                _cancellationTokenSources.Add(downloadItem, cancellationTokenSource);
                var address = GetDownloadAddress(downloadItem);
                var filename = CreateLocalFilename(address);
                downloadItem.LocalFilename = filename;
                var task = DownloadFileAsync(address, filename, downloadItem, cancellationTokenSource.Token);
                var item = downloadItem;
                task.ContinueWith(
                    x =>
                    {
                        _numberOfRunningDownloads--;

                        if (_numberOfRunningDownloads == 0)
                        {
                            RaiseDownloadingStopped(new EventArgs());
                        }

                        if (x.IsCanceled)
                        {
                            _downloadQueue.AddFirst(item);
                        }
                        else
                        {
                            _finishedDownloadsRepository.AddFinishedDownload(item.RssItem);
                            StartDownloads();
                        }

                        _cancellationTokenSources.Remove(item);
                    });
            }
        }