微信公众号“DotNet”的文章《.NET 异步、跨平台、支持分段下载的开源项目 》(参考文献1)介绍了GitHub中的开源下载模块Downloader的基本用法,本文学习Downloader的主要参数设置方式及基本用法,最后编写简单的测试程序进行文件下载测试。
新建Winform项目,在NuGet管理器中安装Downloader,如下图所示。

Downloader模块中使用DownloadConfiguration类配置下载属性,主要属性如下所示:
| 序号 | 名称 | 说明 |
|---|---|---|
| 1 | BufferBlockSize | 缓冲块大小,int类型,默认值为1024 |
| 2 | CheckDiskSizeBeforeDownload | 下载文件前检查磁盘空间,bool类型,默认值为true |
| 3 | ChunkCount | 分块下载文件时的分块数量,int类型,默认值为1 |
| 4 | MaximumBytesPerSecond | 最大下载速度,默认值为long.MaxValue |
| 5 | MaximumSpeedPerChunk | 单块的最大下载速度,只读属性,如果非并行下载,其值等同MaximumBytesPerSecond,并行下载时,其值为MaximumBytesPerSecond / Math.Min(ChunkCount, ParallelCount) |
| 6 | MaxTryAgainOnFailover | 下载失败时的最大尝试次数,int类型,默认值为int.MaxValue |
| 7 | ParallelDownload | 是否支持并行下载,bool值,默认为false |
| 8 | ParallelCount | 并行下载数数量,int类型,默认值为,配合ParallelDownload 使用 |
| 9 | RangeDownload | 是否仅下载文件的部分内容,bool类型,默认值为false |
| 10 | RangeLow/RangeHigh | 下载部分内容时,设置内容的起止位置,long类型,默认值为0,配合RangeDownload使用 |
| 11 | RequestConfiguration | 设置请求头信息,RequestConfiguration类型,详细设置见参考文献2 |
| 12 | Timeout | 设置超时时间(毫秒,millisecond),int类型,默认值为1000 |
| 13 | ClearPackageOnCompletionWithFailure | 下载失败时清除已下载内容?,bool类型,默认值为false |
| 14 | MinimumSizeOfChunking | 分块的最小尺寸,long类型,默认值为512 |
Downloader模块中使用DownloadService下载文件(也可以用DownloadBuilder,用法见参考文献2),主要函数、事件等如下所示:
| 序号 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 1 | IsBusy/IsCancelled/ IsPaused/Status | 属性 | 获取下载状态 |
| 2 | Package | 属性 | 存储下载过程信息,支持序列化/反序列化,可用于停止下载后令择时机恢复下载 |
| 3 | DownloadFileCompleted | 事件 | 下载结束时的事件,在文件下载出错、取消下载和成功下载后触发 |
| 4 | DownloadProgressChanged | 事件 | 下载进度事件,文件下载过程中触发,通过该事件可以获取总的下载进度、已下载大小、总下载大小、下载速度等信息 |
| 5 | ChunkDownloadProgressChanged | 文件块的下载进度事件, | |
| 6 | DownloadStarted | 事件 | 下载开始时的事件 |
| 7 | DownloadFileTaskAsync | 函数 | 文件异步下载函数 |
| 8 | CancelAsync | 函数 | 取消文件下载 |
| 9 | Pause | 函数 | 暂停下载 |
| 10 | Resume | 函数 | 恢复下载 |
根据参考文献1和3中的示例编写了测试程序,程序运行效果如下图所示(代码不再赘述,详见参考文献1和3).

还需注意,以下情况Downloader无法分块下载文件,只能采用单文件块方式串行下载文件。

参考文献:
[1]https://it.sohu.com/a/724279623_121124365
[2]https://github.com/bezzad/Downloader
[3]https://github.com/bezzad/Downloader/blob/master/src/Samples/Downloader.Sample
![[尚硅谷React笔记]——第2章 React面向组件编程](https://img-blog.csdnimg.cn/215ab1c6d5de4cd8acefe976c585a768.png)


















