В этом сценарии я предполагаю, что вы не хотите прерывать цикл до тех пор, пока все ваши сообщения не будут отправлены в соответствующий пункт назначения. Я бы предложил вам использовать исключение Aggregate, которое может рассказать вам об общем сообщении и его статусе:
В конце вашего цикла, вы можете передать List его конструктору и выбросить его.
В конце цикла выполните:
AggregateException aggregateEx = new AggregateException(errors);
throw aggregateEx;
Приложение, которое запускается на устройстве, должно управлять механизмами подключения, повторного подключения и логикой повторных попыток отправки и получения сообщений. Кроме того, требования стратегии повтора сильно зависят от сценария IoT, контекста, возможностей устройства.
SDK устройств Azure IoT Hub предназначены для упрощения подключения и обмена данными между облаком и устройством и облаком. Эти SDK обеспечивают надежный способ подключения к Azure IoT Hub и полный набор параметров для отправки и получения сообщений.
Скорее всего, жест доставки сообщения не выполнен из-за сбоя соединения, что может происходить на многих уровнях.
1) Сетевые ошибки: отключение сокета и ошибки разрешения имен
2) Ошибки уровня протокола для транспорта HTTP, AMQP и MQTT: отдельные ссылки или сеансы с истекшим сроком действия
3) Ошибки уровня приложения, возникающие из-за локальных ошибок: неверные учетные данные или поведение службы (например, превышение квоты или регулирование)
SDK устройства обнаруживают ошибки на всех трех уровнях. Ошибки, связанные с ОС и аппаратные ошибки не обнаруживаются и обрабатываются SDK устройства. Дизайн SDK основан на Руководстве по обработке переходных сбоев от Центра архитектуры Azure.
Я вижу, что вы выбрали не политику повторных попыток, что означает, что у вас проблемы с пропускной способностью или стоимостью.
В идеале нужно реализовать правильную логику Retry, чтобы обеспечить доставку. Здесь вы можете посмотреть полный образец для IOT HUb
Вы можете узнать больше о RetryGuidance здесь
Надеюсь, это поможет.