gpt4 book ai didi

stream - 如何仅在 Azure blob 存在时异步下载它 - 一步?

转载 作者:行者123 更新时间:2023-12-04 16:49:56 25 4
gpt4 key购买 nike

我想从 Azure 存储异步下载块 blob,但前提是 blob 存在。

var blob = documentsContainer.GetBlockBlobReference(blobName);
if (await blob.ExistsAsync())
await blob.DownloadToStreamAsync(stream);

但这会进行两次 HTTP 调用,对吗?我的应用程序中的常见路径是 blob 将存在,因此大多数时候我不希望存在检查的开销。但我需要优雅地处理 blob 不存在的情况。

我尝试离开存在检查并仅使用 try/catch 块。如果我正在使用 DownloadTextAsync 那就行了,但在使用 DownloadToStreamAsync 时, 如果 blob 不存在,它就会挂起。

有没有办法将二进制 blob 异步下载到流中,前提是它存在,而无需进行两次调用?

最佳答案

事实证明,它确实正确地抛出了异常:

try
{
var blob = documentsContainer.GetBlockBlobReference(blobName);
await blob.DownloadToStreamAsync(stream);
...
}
catch (StorageException ex)
{
if ((HttpStatusCode)ex.RequestInformation.HttpStatusCode == HttpStatusCode.NotFound)
{
return null; // exit the calling function
}

throw;
}

当我最初尝试这个时,它卡在 DownloadToStreamAsync称呼。在原问题的评论之后,我开始检查版本,我发现 Microsoft.Data.Services.Client.dll 中的不匹配。我使用的是 5.6.1,但我的测试项目不知何故有 5.6.0。 (我不确定它是从哪里得到的,因为它根本不在我的解决方案中)。从测试项目手动引用 Microsoft.Data.Services.Client 5.6.1 后,它不再挂起。

关于stream - 如何仅在 Azure blob 存在时异步下载它 - 一步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22047936/

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