Я пытаюсь понять поведение обработки сетевых ошибок в клиенте Azure Storage .NET.Короче говоря, моя проблема:
Если я вытаскиваю сетевой кабель во время загрузки большого двоичного объекта из хранилища больших двоичных объектов, мое приложение будет зависать не менее 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);
}
Я знаю, что могу настроитьсвойство MaximumExecutionTime в BlobRequestOptions, но мне кажется немного странным, что поведение по умолчанию заключается в том, чтобы зависать на неопределенный срок в случае падения сетевого подключения.Это заставляет меня подозревать, что я упускаю что-то базовое в том, как должен использоваться клиент.(Там значение по умолчанию для MaximumExecutionTimeout кажется бесконечным.)
Я также знаю, что могу передать ServerTimeout, но я понимаю, что это используется внутри службы хранилища Azure и не будет применимо, если естьОтключение сети.
Мне кажется, что я ищу именно тайм-аут для каждого запроса на HTTP-вызовы в хранилище больших двоичных объектов.Что-то вроде Timeout для HttpWebRequest.
(я воспроизвел мою проблему в клиенте хранилища Azure версии 9.3.2)