我试图了解 Azure 存储 .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);
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以在 BlobRequestOptions 中配置MaximumExecutionTime属性,但对我来说有点奇怪的是,默认行为是在网络连接中断时无限期挂起。这让我怀疑我错过了一些关于客户端应该如何使用的基本知识。(MaximumExecutionTimeout 的默认值似乎是无限)。
我还知道我可以传入 ServerTimeout,但我的理解是,这是在 Azure 存储服务内部使用的,如果出现网络中断,则不适用。
我认为我正在特别寻找的是对 blob 存储进行的 HTTP 调用的每个请求超时。类似于 HttpWebRequest 的超时。
(我已在 Azure 存储客户端版本 9.3.2 中重现了我的问题)