/// <summary> /// 开始下载文件 /// </summary> /// <returns></returns> public async Task DownloadFile() { var(response, contentLength) = await GetContentLength(); lStartPos = 0; if (System.IO.File.Exists(File.FullName))//另外如果文件已经下载完毕,就不需要再断点续传了,不然请求的range 会不合法会抛出异常。 { FileStream = System.IO.File.OpenWrite(File.FullName); lStartPos = FileStream.Length; FileStream.Seek(lStartPos, System.IO.SeekOrigin.Current); //移动文件流中的当前指针 } else { FileStream = new FileStream(File.FullName, System.IO.FileMode.Create); lStartPos = 0; } FileStream.SetLength(contentLength); FileWriter = new RandomFileWriter(FileStream); SegmentManager = new SegmentManager(contentLength); _progress.Report(new DownloadProgress($"file length = {contentLength}", SegmentManager)); var downloadSegment = SegmentManager.GetNewDownloadSegment(); // 下载第一段 Download(response, downloadSegment); var supportSegment = await TryDownloadLast(contentLength); var threadCount = 1; if (supportSegment) { // 多创建几个线程下载 threadCount = 10; for (var i = 0; i < threadCount; i++) { Download(SegmentManager.GetNewDownloadSegment()); } } for (var i = 0; i < threadCount; i++) { _ = Task.Run(DownloadTask); } await FileDownloadTask.Task; }
public DownloadProgress(string message, SegmentManager segmentManager) { Message = message; SegmentManager = segmentManager; }
public DownloadProgress(SegmentManager segmentManager) { SegmentManager = segmentManager; }