У меня проблема с библиотеками Microsoft.WindowsAzure.Storage v9.3.3 и Microsoft.Azure.Storage.Blob v11.1.0 NuGet. В частности, при загрузке большого файла. Если вы меняете свою сеть во время метода «DownloadToStreamAsync», вызов зависает. Я видел, как мой код, который обрабатывает много файлов, иногда зависает, и я пытался сузить его. Я думаю, что изменение сети может быть надежным способом вызвать сбой в библиотеках хранилища BLOB-объектов Azure.
Дополнительная информация о проблеме;
- Когда я отключаю сетевой кабель, мой компьютер переключается на WiFi, но запрос никогда не возобновляется
- Если я начинаю загрузку по WiFi, а затем подключаю сетевой кабель, возникает такая же ошибка
- Свойство «ServerTimeout» никогда не приводит к сбою запроса или действует как ожидается в соответствии с Документацией
- Свойство MaximumExecutionTime не выполняет запрос, но мы не хотимограничить себя определенным периодом времени, особенно потому, что мы имеем дело с большими файлами
Следующий код завершается ошибкой 100% времени, если сеть изменяется во время вызова.
static void Main(string[] args)
{
try
{
CloudStorageAccount.TryParse("<Connection String>", out var storageAccount);
var cloudBlobClient = storageAccount.CreateCloudBlobClient();
var container = cloudBlobClient.GetContainerReference("<Container Reference>");
var blobRef = container.GetBlockBlobReference("Large Text.txt");
Stream memoryStream = new MemoryStream();
BlobRequestOptions optionsWithRetryPolicy = new BlobRequestOptions() { ServerTimeout = TimeSpan.FromSeconds(5), RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(20), 4) };
blobRef.DownloadToStreamAsync(memoryStream, null, optionsWithRetryPolicy, null).GetAwaiter().GetResult();
Console.WriteLine("Completed");
}
catch (Exception ex)
{
Console.WriteLine($"Exception: {ex.Message}");
}
finally
{
Console.WriteLine("Finished");
}
}
Я обнаружил эту активную проблему в GitHub хранилища Azure, но она кажется неактивной.
Есть ли какой-нибудь другой подход, который я мог бы использовать для надежной и эффективной загрузки большого двоичного объекта или чего-то, что мне не хватает при использовании этого пакета?