C# 在C中使用azure服务总线实现指数退避#

C# 在C中使用azure服务总线实现指数退避#,c#,.net,asp.net-core,.net-core,C#,.net,Asp.net Core,.net Core,我正在尝试使用azure服务总线实现指数退避。 基本上,我有一个catch块,如果当前我正在做的任何错误,我会要求它每1秒重试一次,我正在等待 目标: 我想使用指数延迟。因此,基本上在每次重试后,我希望以指数方式增加秒数,而不希望等待。在此之前,它可以处理其他消息 当前catch块看起来像: catch (Exception ex) { _logger.Error(ex, $"Failed to process r

我正在尝试使用azure服务总线实现指数退避。 基本上,我有一个catch块,如果当前我正在做的任何错误,我会要求它每1秒重试一次,我正在等待

目标: 我想使用指数延迟。因此,基本上在每次重试后,我希望以指数方式增加秒数,而不希望等待。在此之前,它可以处理其他消息

当前catch块看起来像:

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)

我不太确定我做的是否正确


目标:在等待下一次重试时,需要重试回退策略,使处理线程可用。在达到最大传输尝试后,考虑死字的指数退避。

许多面向Azure的.NET库在内部实现重试。服务总线客户端也内置了它。退房根据文件:

当使用内置RetryExponential实现时,请勿 在策略对服务器繁忙做出反应时实施回退操作 异常并自动切换到适当的重试模式


除此之外,您应该在发出请求之前设置策略,而不是在过程中设置策略。

对于重试策略,您也可以使用外部库,如。

您也可以使用外部库,如Polly@MariusStănescu否我想使用azure服务总线,因为在那里处理消息,所以希望保持一致。因此,一旦消息到达捕获块,我希望消息完成,并通过允许其他消息访问以指数方式重试ot处理到那时。但在我的代码中,我如何重试。我是新来的。你能用一个例子来指导吗?看看我贴出的答案链接,里面有一个例子。是的,我看到了,但不确定我做错了什么。如果我们像这样重试,是否需要尝试捕获?所以基本上我想在指数延迟后执行try,你是什么意思?a) 如果您需要更复杂的逻辑,请使用文档中的示例实现自定义策略类。使用try/catch进行审核/记录。当我这样做时,它正在执行try部分,而不等待指数延迟
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);
                    
                }