gpt4 book ai didi

azure - 获取 CloudBlob.DownloadToFileParallelAsync 的进度

转载 作者:行者123 更新时间:2023-12-03 03:53:54 32 4
gpt4 key购买 nike

我正在尝试从我的 Azure 存储帐户下载二进制文件。最初,我使用 CloudBlob.DownloadToFileAsync(),它允许我提供 IProgress 参数并获取传输进度更新。

但是,在大于 2GB 的文件上,DownloadToFileAsync 挂起。根据文档,我需要使用 DownloadToFileParallelAsync 来下载更大的文件。我已经实现了这个,并确认它现在可以工作,但现在我无法获取下载进度,因为它不提供 IProgress 参数。

https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.storage.blob.cloudblob.downloadtofileparallelasync?view=azure-dotnet-legacy

谁能告诉我如何收集有用的进度数据,或提供解决方法?

            int parallelIOCount = SystemInfo.processorCount;
long rangeSizeInBytes = 16 * Constants.MB;
await cloudModuleBlob.DownloadToFileParallelAsync(targetTempModuleFile, FileMode.Create, parallelIOCount, rangeSizeInBytes, cancellationTokenSource.Token);

progressSlider.value = 1.0f;


//When the download is finished...
//Rename the temp file to the full version.
if (File.Exists(targetCiqModuleFile))
{
File.Delete(targetCiqModuleFile);
}

File.Move(targetTempModuleFile, targetCiqModuleFile);



Debug.Log("Download saved to: " + targetCiqModuleFile);

最佳答案

通过解决方法解决了这个问题。我没有使用 DownloadToFileAsync,而是使用 DownloadRangeToStreamAsync 将 blob 分成更小的部分,并在客户端将它们组合起来。可有效处理 16mb block 。

            //Create the file.
using (FileStream fileStream = File.Create(targetTempModuleFile))
{

long chunkSize = 16 * Constants.MB;

Int64 current = 0;

while (current < cloudModuleBlob.Properties.Length)
{


if ((current + chunkSize) > cloudModuleBlob.Properties.Length)
{
await cloudModuleBlob.DownloadRangeToStreamAsync(fileStream, current, (cloudModuleBlob.Properties.Length - current), default, default, default, progressHandler, cancellationToken);
}
else
{
await cloudModuleBlob.DownloadRangeToStreamAsync(fileStream, current, chunkSize, default, default, default, progressHandler, cancellationToken);
}


current = current + chunkSize;

}


}

关于azure - 获取 CloudBlob.DownloadToFileParallelAsync 的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65432395/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com