首页 > 解决方案 > 使用 DownloadToFileParallelAsync 跟踪更改

问题描述

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

我试过的东西:

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

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

标签: c#azureblobazcopy

解决方案


根据微软文件 DownloadToFileParallelAsync -

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

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

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


推荐阅读