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

如何使用Polly Retry实现C#双查询重试,任一返回非空即可终止重试流程

实现步骤

1. 安装依赖

首先通过NuGet安装Polly库,用于实现重试策略。

2. 完整代码实现

你可以根据实际需求选择并行查询或者串行查询的实现:

并行查询版本(两个查询同时执行,效率更高)

// 替换为你实际的查询返回类型
YourTypeA resultA = default;
YourTypeB resultB = default;

// 定义重试策略
var retryPolicy = Policy
    .HandleResult<bool>(success => !success)
    .WaitAndRetryAsync(
        retryCount: 5,
        sleepDurationProvider: _ => TimeSpan.FromMilliseconds(200)
    );

// 执行策略
await retryPolicy.ExecuteAsync(async () =>
{
    // 并行执行两个查询
    var aTask = _aQuery.Execute(aId);
    var bTask = _bQuery.Execute(bId);
    await Task.WhenAll(aTask, bTask);

    resultA = aTask.Result;
    resultB = bTask.Result;

    // 任意结果非空则终止重试
    return resultA != null || resultB != null;
});

// 后续业务逻辑,此时resultA和resultB至少有一个非空

串行查询版本(第一个查询成功就不执行第二个,节省请求资源)

// 替换为你实际的查询返回类型
YourTypeA resultA = default;
YourTypeB resultB = default;

var retryPolicy = Policy
    .HandleResult<bool>(success => !success)
    .WaitAndRetryAsync(
        retryCount: 5,
        sleepDurationProvider: _ => TimeSpan.FromMilliseconds(200)
    );

await retryPolicy.ExecuteAsync(async () =>
{
    resultA = await _aQuery.Execute(aId);
    if (resultA != null) return true;
    
    resultB = await _bQuery.Execute(bId);
    return resultB != null;
});

// 后续业务逻辑

注意说明

  • 重试次数设置为5次,代表首次执行失败后最多再试5次,总计最多执行6次查询逻辑
  • 只要任意一次执行中存在返回非空的查询,重试流程会立刻终止,直接进入后续代码
  • 你可以根据业务需要调整查询的执行顺序、是否并行,以及返回类型的定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:15:01