private static async Task DownloadFileAsync(DownloadOption option) { var output = option.Output ?? ""; output = Path.GetFullPath(output); Console.WriteLine($"Download url = {option.Url}"); Console.WriteLine($"Output = {output}"); try { var loggerFactory = LoggerFactory.Create(builder => { }); var logger = loggerFactory.CreateLogger <SegmentFileDownloader>(); using var progress = new FileDownloadSpeedProgress(); progress.ProgressChanged += (sender, downloadProgress) => { Console.Clear(); Console.WriteLine($"Download url = {option.Url}"); Console.WriteLine($"Output = {output}"); Console.WriteLine(); Console.WriteLine( $"Process {downloadProgress.DownloadProcess} {downloadProgress.DownloadSpeed}"); foreach (var downloadSegment in downloadProgress.DownloadProgress.GetCurrentDownloadSegmentList()) { Console.WriteLine(downloadSegment); } }; var file = new FileInfo(output); var url = option.Url; var segmentFileDownloader = new SegmentFileDownloader(url, file, logger, progress); await segmentFileDownloader.DownloadFileAsync(); //finished = true; } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(e); Console.ResetColor(); } }
public async void AddDownloadFile() { var url = AddFileDownloadViewModel.CurrentDownloadUrl; var file = AddFileDownloadViewModel.CurrentDownloadFilePath; var logger = _loggerFactory.CreateLogger <SegmentFileDownloader>(); using var progress = new FileDownloadSpeedProgress(); file = Path.GetFullPath(file); var downloadFileInfo = new DownloadFileInfo() { FileName = Path.GetFileName(file), AddedTime = DateTime.Now.ToString(), DownloadUrl = url, FilePath = file }; DownloadFileInfoList.Add(downloadFileInfo); progress.ProgressChanged += (sender, downloadProgress) => { downloadFileInfo.DownloadSpeed = downloadProgress.DownloadSpeed; downloadFileInfo.FileSize = downloadProgress.FileSize; downloadFileInfo.DownloadProcess = downloadProgress.DownloadProcess; }; _ = DownloadFileListManager.WriteDownloadedFileListToFileAsync(DownloadFileInfoList.ToList()); var segmentFileDownloader = new SegmentFileDownloader(url, new FileInfo(file), logger, progress, sharedArrayPool: SharedArrayPool, bufferLength: FileDownloaderSharedArrayPool.BufferLength); CurrentSegmentFileDownloader = segmentFileDownloader; await segmentFileDownloader.DownloadFileAsync(); // 下载完成逻辑 progress.Stop(); downloadFileInfo.DownloadSpeed = ""; downloadFileInfo.DownloadProcess = "完成"; downloadFileInfo.IsFinished = true; _ = DownloadFileListManager.WriteDownloadedFileListToFileAsync(DownloadFileInfoList.ToList()); // 后续优化多任务下载的时候的回收 _ = Task.Delay(TimeSpan.FromSeconds(3)) .ContinueWith(_ => ((FileDownloaderSharedArrayPool)SharedArrayPool).Clean()); }