我正在尝试理解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的默认值似乎是无穷大)。
我也知道我可以传递一个ServerTimeout,但我的理解是这只是在Azure存储服务内部使用,如果网络中断将不适用。
我认为我特别需要的是针对向Blob存储发出的HTTP调用的每个请求超时,类似于HttpWebRequest上的超时。
(我已经在Azure Storage Client版本9.3.2中复现了我的问题)。