Я пытаюсь реализовать экспоненциальную отсрочку с помощью служебной шины azure. В основном у меня есть блок catch, и если в настоящее время я делаю какую-либо ошибку, я прошу его повторить попытку через каждую 1 секунду, и я жду этого.
Цель: я хочу использовать экспоненциальную задержку. Итак, в основном после каждой попытки я хочу экспоненциально увеличивать секунды, и я не хочу, чтобы он ждал. До тех пор он может обрабатывать другие сообщения.
Текущий блок перехвата выглядит так:
catch (Exception ex)
{
_logger.Error(ex, $"Failed to process request {requestId}");
totalAttempts++;
if (totalAttempts == MaxAttempts)
return new Response { Error = ex.ToString() };
await Task.Delay(TimeSpan.FromSeconds(1));
}
Я пробовал следующее, но он не увеличивает время экспоненциально. Пользуюсь этим впервые. while (true)
try
{
executemethod();
}
catch (Exception ex)
{
_logger.Error(ex, $"Failed to process request {requestId}");
totalAttempts++;
if (totalAttempts == MaxAttempts)
return new Response { Error = ex.ToString() };
queueClient.RetryPolicy = new RetryExponential(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(30), 10);
}
Я не очень уверен, правильно ли я делаю.
Цель: нужно повторить попытку со стратегией отката и сделать поток обработки доступным для других сообщения, ожидая следующей повторной попытки. Рассмотрим экспоненциальный откат с мертвыми буквами после достижения максимального числа попыток доставки.