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

如何为带参数的方法实现通用重试模式?

通用重试模式的简洁实现(支持任意参数)

你当前的实现通过重载Execute方法适配不同参数数量的委托,确实会带来维护痛点:新增参数数量的方法就需要加对应重载,修改重试逻辑时要同步更新所有重载。

可以通过闭包封装的方式,用单一方法实现支持任意参数的通用重试逻辑,核心思路是把所有带参数的方法调用包装成无参的Func<TResult>,让核心重试逻辑只需要处理这一种委托类型。

简化后的通用Retrier实现

using System;
using System.Threading;

public class Retrier
{
    /// <summary>
    /// 执行指定方法,失败时自动重试指定次数,每次重试间隔指定毫秒数
    /// </summary>
    /// <typeparam name="TResult">方法返回值类型</typeparam>
    /// <param name="function">要执行的无参委托(可通过Lambda包装带参数方法)</param>
    /// <param name="tryTimes">总尝试次数</param>
    /// <param name="interval">重试间隔(单位:毫秒)</param>
    /// <returns>方法执行成功后的返回值</returns>
    /// <exception cref="ArgumentNullException">当function为null时抛出</exception>
    /// <exception cref="ArgumentOutOfRangeException">当tryTimes小于1时抛出</exception>
    public static TResult Execute<TResult>(Func<TResult> function, int tryTimes, int interval)
    {
        if (function == null)
            throw new ArgumentNullException(nameof(function));
        if (tryTimes < 1)
            throw new ArgumentOutOfRangeException(nameof(tryTimes), "尝试次数不能小于1");

        for (int i = 0; i < tryTimes - 1; i++)
        {
            try
            {
                return function();
            }
            catch
            {
                Thread.Sleep(interval);
            }
        }

        // 最后一次尝试,失败直接抛出异常(不捕获)
        return function();
    }
}

调用示例(支持任意参数数量)

不管目标方法有多少个参数,都可以通过Lambda表达式将其封装成无参委托:

1. 无参方法调用

// 调用无参的GetData方法,重试3次,间隔1秒
var data = Retrier.Execute(() => GetData(), 3, 1000);

2. 单参数方法调用

int userId = 123;
// 调用带userId参数的GetUserById方法
var user = Retrier.Execute(() => GetUserById(userId), 3, 1000);

3. 多参数方法调用

string userName = "Alice";
int userAge = 30;
// 调用带两个参数的GetUserInfo方法
var userInfo = Retrier.Execute(() => GetUserInfo(userName, userAge), 3, 1000);

优势说明

  • 维护成本极低:仅需维护一个核心重试方法,修改逻辑时只需调整这一处代码
  • 适配任意参数:通过Lambda闭包封装,支持参数数量任意的方法
  • 代码更简洁:避免了大量重复的重载代码,逻辑更集中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:12:49