使用 DownloadToFileParallelAsync 跟踪更改

Posted

技术标签:

【中文标题】使用 DownloadToFileParallelAsync 跟踪更改【英文标题】:Track changes using DownloadToFileParallelAsync 【发布时间】:2021-12-19 16:05:52 【问题描述】:

当前使用 Microsoft.Azure.Storage.DataMovement 库下载文件 > 10GB。发现 DownloadToFileParallelAsync 对我来说是最快的,而无需使用 Azcopy。该库运行良好,速度相当快,但无法从中获取任何进度信息。

我尝试过的方法:

1.) 使用 OperationContext 抓取发送/接收,但它们似乎不一致。 2.) 使用带有多个线程的 DownloadRangeToStreamAsync 下载附加到进度处理程序(不那么快) 3.) 使用 FileWatcher 尝试在下载过程中跟踪文件大小的变化,但这不起作用,因为 DownloadToFileParallelAsync 似乎将整个文件大小保留在磁盘上,因此大小不会改变。

问题,有没有其他方法可以跟踪进度?

【问题讨论】:

【参考方案1】:

根据微软文档 DownloadToFileParallelAsync -

通过发出并行请求启动异步操作以将 blob 的内容下载到文件中。

但目前在使用 DownloadToFileParallelAsync 下载大文件时没有任何其他选项可以跟踪进度。它也没有像 DownloadToFileAsync 那样提供 Progress 参数,可用于获取下载进度。

现在您可以使用 DownloadRangeToStreamAsync 作为解决方法来解决跟踪下载进度的问题。 使用 DownloadRangeToStreamAsync 将大 blob 文件分成更小的块,然后您可以在客户端将它们组合起来。检查@PhullivanCuriious 的answer 以获得更多理解。虽然它与 DownloadToFileParallelAsync 相比要慢一些,后者是并行(同时)下载文件的多个“切片”。

【讨论】:

以上是关于使用 DownloadToFileParallelAsync 跟踪更改的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)