如何使用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
相关产品推荐
相关产品推荐

