我正在尝试从 Azure blob 下载文件,但在 0.1% 的情况下,它只是卡在 blockBlob.DownloadToStream(...) 上超过 10 分钟。有没有办法在 2 分钟内让这个函数超时?
CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
using (var memoryStream = new System.IO.MemoryStream())
{
blockBlob.DownloadToStream(memoryStream, null, new BlobRequestOptions()
{
ServerTimeout = TimeSpan.FromSeconds(120)
});
string content = Encoding.UTF8.GetString(memoryStream.ToArray());
}
最佳答案
您可以为整个 DownloadToStream 操作配置超时。例如,您可以将 MaximumExecutionTime 设置为 120 秒(这是针对整个 DownloadToStream 操作),将 ServerTimeout 设置为 30 秒(这是针对每个 REST 调用),并指定一个 RetryPolicy( ExponentialRetry 或 LinearRetry ,这是针对每个 REST 调用)以启用在请求超时或失败时重试。通过这样做,每个单独的 Get Blob REST 调用在服务器端将被限制为 30 秒(如果遇到服务器超时问题,重试策略将生效),并且整个 DownloadToStream 操作将在客户端被限制为 2 分钟。
请引用下面的代码示例。注意:BlobRequestOptions 对象只需要构造一次,然后就可以将其用于下面所有与 blob 相关的操作。
var maxRetryCount = 3;
CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
var blobRequestOptions = new BlobRequestOptions
{
ServerTimeout = TimeSpan.FromSeconds(30),
MaximumExecutionTime = TimeSpan.FromSeconds(120),
RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(3), maxRetryCount),
};
using (var memoryStream = new MemoryStream())
{
blockBlob.DownloadToStream(memoryStream, null, blobRequestOptions);
}
关于c# - Azure blob DownloadToStream 耗时太长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30203070/