【发布时间】:2019-03-21 21:02:06
【问题描述】:
我试图了解在 Azure Storage .NET 客户端中处理网络错误的行为。简而言之,我的问题是:
如果我在从 blob 存储下载 blob 时拔出网线,我的应用程序将挂起至少 30 分钟(这是我的耐心持续的时间 - 它可能挂起的时间更长)。
例如,如果我使用以下代码(我没有在 blob 客户端本身上配置任何设置),就会发生这种情况。
...
var blockBlob = container.GetBlockBlobReference("myblob.data");
var blobRequestOptions = new BlobRequestOptions()
{
RetryPolicy = new NoRetry(),
};
using (var stream = new MemoryStream())
{
blockBlob.DownloadToStream(stream, null, blobRequestOptions);
}
我知道我可以在 BlobRequestOptions 中配置 MaximumExecutionTime 属性,但如果网络连接中断,默认行为是无限期挂起,这对我来说似乎有点奇怪。这让我怀疑我遗漏了一些关于客户端应该如何使用的基本内容。 (MaximumExecutionTimeout 的默认值似乎是 Infinite)。
我也知道我可以传入 ServerTimeout,但我的理解是,这是在 Azure 存储服务内部使用的,如果出现网络中断,则不适用。
我认为我正在寻找的是针对对 blob 存储进行的 HTTP 调用的每个请求超时。类似于 HttpWebRequest 的超时。
(我在 Azure 存储客户端 9.3.2 版中重现了我的问题)
【问题讨论】:
标签: c# .net azure timeout azure-blob-storage