Я ищу совет по порядочному шаблону, так как теоретически мой код, который я собираюсь вставить, должен работать:
У меня есть класс, который реализует IAsyncDisposable
public class EventHubPublisher : IEventHubPublisher, IAsyncDisposable
{
private List<EventHubProducerClient> _publishers;
private EventHubProducerClient _currentPublisher;
Я устанавливаю список _publishers
где-то в стеке, а затем пытаюсь опубликовать sh с помощью моего метода ниже:
public async Task Publish<T>(string partitionKey, T message) where T : IMessage
{
foreach (var publisher in _publishers)
{
try
{
await TrySendAsync(partitionKey, message, publisher);
break;
}
catch (Exception e)
{
_logger.LogError(
$"Publishing with producer targeting EventHub {publisher.EventHubName} failed with message {e.Message}");
}
}
}
Ie, когда первый издатель не может опубликовать sh и исключение перехвачено, используйте следующего издателя в списке, если оно прошло успешно: отрыв от l oop.
Моя проблема в том, что итерация по al oop таким образом, чтобы добиться успеха, кажется немного неуклюжей - кто-нибудь может придумать лучший способ сделать это?