You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polly WaitAndRetryAsync重试失效求助:第二个生产者无重试

Polly重试策略异常排查:第二个Service Bus生产者不触发重试

我是Polly库新手,尝试用该库在Service Bus连接失败时实现重试逻辑,使用WaitAndRetryAsync按指定间隔多次重试。现有两个基于MediatR事件的生产者连接Service Bus:第一个生产者在连接方法抛出异常时,WaitAndRetryAsync能正常触发重试;但第二个生产者调用相同连接方法并抛出相同异常时,断点能进入Handle<Exception>逻辑,却从未触发WaitAndRetryAsync。请指导排查问题。


相关代码

重试策略定义

private readonly AsyncRetryPolicy<IConnection> _connectionRetryPolicy;

构造函数初始化

_connectionRetryPolicy = CreateConnectionRetryPolicy(recoveryPolicy);

策略创建方法

private AsyncRetryPolicy<IConnection> CreateConnectionRetryPolicy(IRecoveryPolicy recoveryPolicy)
{
    return Policy<IConnection>
        .Handle<Exception>(exceptionPredicate: exception =>
        {
            Console.WriteLine(exception);
            return true;
        })
        .WaitAndRetryAsync(recoveryPolicy.RetryCount, (retryAttempt, context) =>
        {
            context.SetRetryCount(retryAttempt);
            return recoveryPolicy.GetDelay(retryAttempt);
        }, (result, _, context) =>
        {
            var retryCount = context.GetRetryCount();
            var endpoint = context.GetEndpoint();
        });
}

执行逻辑

private Task<IConnection> CreateConnection(CancellationToken cancellationToken = default)
{
    var ctx = new Context();
    ctx.SetRetryCount(0);
    return _connectionRetryPolicy.ExecuteAsync(async (context, ct) =>
    {
        var connection = await CreateConnectionAsync(endpoint, ct);
        return connection;
    }, ctx, cancellationToken);
}  

排查方向
  • 检查策略实例与配置:确认两个生产者是否使用独立的_connectionRetryPolicy实例,或共享实例时recoveryPolicy.RetryCount在第二个生产者调用时是否为0(0次重试会直接跳过)。
  • Context对象状态:虽然每次CreateConnection都新建Context,但要排查MediatR事件处理中是否存在上下文复用、并发修改的情况,导致重试计数异常。
  • 异常捕获验证:在Handle<Exception>的lambda中打印异常类型、堆栈信息,对比两个生产者抛出的异常是否完全一致,确认没有特殊异常被意外过滤。
  • CancellationToken有效性:检查第二个生产者调用CreateConnection时传入的CancellationToken是否已被取消,Polly会在token取消时终止重试流程。
  • 线程与并发环境:确认两个生产者的MediatR事件处理线程环境是否存在差异,比如是否有同步上下文导致策略执行逻辑异常。
  • Polly版本问题:检查当前使用的Polly版本是否存在并发重试相关的已知bug,尝试升级到最新稳定版验证。

内容的提问来源于stack exchange,提问作者V R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:52:37