У меня есть код с использованием библиотеки хранилища Azure, который выглядит следующим образом:
CloudBlobContainer container = obtainContainer();
var blobList = container.ListBlobs(options:OptionsWithLinearRetry);
foreach (var blobItem in blobList) // << exception happens here sometimes
{
//process item
}
и в большинстве случаев работает нормально. Но иногда что-то не так с сетью, и тогда я получаю:
Microsoft.WindowsAzure.Storage.StorageException: невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом. ---> System.IO.IOException: невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом. ---> System.Net.Sockets.SocketException: существующее соединение было принудительно закрыто удаленным хостом
и стек выглядит так:
// lots of Azure Storage Library stuff here
at Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.<>c__DisplayClass13.<ListBlobs>b__12(IContinuationToken token)
at Microsoft.WindowsAzure.Storage.Core.Util.General.<LazyEnumerable>d__0`1.MoveNext()
// my code with foreach line here
и похоже, что foreach вызывает вызов MoveNext()
, и последний завершается ошибкой при получении нового фрагмента данных.
Могу ли я как-то вызвать повторный вызов MoveNext()
? Есть ли способ использовать логику try-catch-retry в цикле foreach?