Политика Polly Retry блокирует или ждет успеха ⇐ C#
Политика Polly Retry блокирует или ждет успеха
У меня следующая политика повторных попыток опроса:
var retry = новый ResiliencePipelineBuilder(); retry.AddRetry(новые RetryStrategyOptions { BackoffType = DelayBackoffType.Экспоненциальный, UseJitter = true, // Добавляет случайный фактор к задержке MaxRetryAttempts = int.MaxValue, Задержка = TimeSpan.FromSeconds(1), Макс.Задержка = TimeSpan.FromSeconds(15), При повторе = аргументы => { _logger.LogWarning($"Попытка повторного подключения Mqtt: {args.AttemptNumber} с задержкой {args.RetryDelay}ms."); вернуть значение по умолчанию; } });
Затем я использую его вот так:
частная асинхронная задача ReConnectAsync() { пытаться { //Проверяем, не подключаемся ли мы уже повторно если (_isReconnecting) возврат; _isReconnecting = правда; // Полли повторяет попытку await _retryPolicy.ExecuteAsync(async x => await ConnectToMqttAsync()); } catch (исключение-исключение) { _logger.LogError(исключение: «не удалось повторить попытку подключения к mqtt.»); } окончательно { _isReconnecting = ложь; } } Теперь моя проблема в том, что я ожидаю вызова, но он не блокируется и не ждет. Кажется, он запускает фоновую задачу, которая выполняет повторную попытку. И теперь моя проблема в том, что у меня есть несколько экземпляров Полли, занятых повторной попыткой.
Как я могу заставить его заблокировать/дождаться, пока политика повторной попытки не будет успешной или неудачной?
У меня следующая политика повторных попыток опроса:
var retry = новый ResiliencePipelineBuilder(); retry.AddRetry(новые RetryStrategyOptions { BackoffType = DelayBackoffType.Экспоненциальный, UseJitter = true, // Добавляет случайный фактор к задержке MaxRetryAttempts = int.MaxValue, Задержка = TimeSpan.FromSeconds(1), Макс.Задержка = TimeSpan.FromSeconds(15), При повторе = аргументы => { _logger.LogWarning($"Попытка повторного подключения Mqtt: {args.AttemptNumber} с задержкой {args.RetryDelay}ms."); вернуть значение по умолчанию; } });
Затем я использую его вот так:
частная асинхронная задача ReConnectAsync() { пытаться { //Проверяем, не подключаемся ли мы уже повторно если (_isReconnecting) возврат; _isReconnecting = правда; // Полли повторяет попытку await _retryPolicy.ExecuteAsync(async x => await ConnectToMqttAsync()); } catch (исключение-исключение) { _logger.LogError(исключение: «не удалось повторить попытку подключения к mqtt.»); } окончательно { _isReconnecting = ложь; } } Теперь моя проблема в том, что я ожидаю вызова, но он не блокируется и не ждет. Кажется, он запускает фоновую задачу, которая выполняет повторную попытку. И теперь моя проблема в том, что у меня есть несколько экземпляров Полли, занятых повторной попыткой.
Как я могу заставить его заблокировать/дождаться, пока политика повторной попытки не будет успешной или неудачной?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение