2

受到编写重试逻辑的 Cleanest 方式的启发?我做的

    public static T Retry<T>(int numRetries, int timeout, Delegate method, params object[] args)
    {
        if (method == null)
            throw new ArgumentNullException("method");

        var retval = default(T);
        do
        {
            try
            {
                retval = (T) method.DynamicInvoke(args);
                return retval;
            }
            catch (TimeoutException)
            {
                if (numRetries <= 0)
                    throw; // avoid silent failure
                Thread.Sleep(timeout);
            }
        } while (numRetries-- > 0);

        return retval;
    }

但是我遇到了方法组问题。

测试设置

    private int Add(int x, int y)
    {
        return x + y;
    }

    public static void Main(string[] args)
    {
        var r = Retry<int>(5, 10, Add, 1, 1);
    }

有没有更好的方法来解决这个问题Retry<int>(5, 10, new Func<int, int, int>(Add), 1, 1);

4

1 回答 1

4

您可以更改Retry

public static T Retry<T>(int numRetries, int timeout, Func<T> method)
{
    if (method == null)
        throw new ArgumentNullException("method");

    var retval = default(T);
    do
    {
        try
        {
            retval = method();
            return retval;
        }
        catch (TimeoutException)
        {
            if (numRetries <= 0)
                throw; // avoid silent failure
            Thread.Sleep(timeout);
        }
    } while (numRetries-- > 0);

    return retval;
}

并称为

var result = Retry(5, 10, ()=>Add(1,1));
于 2013-05-04T15:37:17.530 回答