Business.DownloadBusiness.StartDownloadAsync C# (CSharp) Метод

StartDownloadAsync() приватный Метод

private StartDownloadAsync ( Business.DownloadItem downloadInfo ) : Task
downloadInfo Business.DownloadItem
Результат Task
        private async Task StartDownloadAsync(DownloadItem downloadInfo) {
            downloadInfo.Status = DownloadStatus.Initializing;

            // Query the download URL for the right file.
            var VTask = GetDownloadUrlsAsync(downloadInfo.Request.DownloadUrl);
            var VideoList = await VTask.ConfigureAwait(false);
            if (VideoList == null) {
                downloadInfo.Status = DownloadStatus.Failed;
                RaiseCallback(downloadInfo);
                return;
            }

            if (!downloadInfo.UpgradeAudio || downloadInfo.Request.FileName == null || !File.Exists(Settings.NaturalGroundingFolder + downloadInfo.Request.FileName)) {
                downloadInfo.UpgradeAudio = false;
                // Get the highest resolution format.

                BestFormatInfo BestFile = SelectBestFormat(VideoList);

                if (BestFile.BestVideo.AdaptiveType == AdaptiveType.None) {
                    // Download single file.
                    downloadInfo.Files.Add(new DownloadItem.FileProgress() {
                        Source = BestFile.BestVideo,
                        Destination = downloadInfo.Destination + BestFile.BestVideo.VideoExtension
                    });
                } else {
                    // Download audio and video separately.
                    downloadInfo.Files.Add(new DownloadItem.FileProgress() {
                        Source = BestFile.BestVideo,
                        Destination = downloadInfo.Destination + GetCodecExtension(BestFile.BestVideo.VideoType)
                    });
                    if (BestFile.BestAudio != null) {
                        downloadInfo.Files.Add(new DownloadItem.FileProgress() {
                            Source = BestFile.BestAudio,
                            Destination = downloadInfo.Destination + GetAudioExtension(BestFile.BestAudio.AudioType)
                        });
                    }
                }
            } else if (File.Exists(Settings.NaturalGroundingFolder + downloadInfo.Request.FileName)) {
                // Keep local video and upgrade audio.
                VideoInfo AudioFile = SelectBestAudio(from v in VideoList
                                                      where (v.CanExtractAudio || v.AdaptiveType == AdaptiveType.Audio)
                                                      orderby v.AudioBitrate descending
                                                      select v);
                downloadInfo.Files.Add(new DownloadItem.FileProgress() {
                    Source = AudioFile,
                    Destination = downloadInfo.Destination + GetAudioExtension(AudioFile.AudioType)
                });
            }

            await DownloadFilesAsync(downloadInfo, downloadInfo.Callback).ConfigureAwait(false);
        }