2

再試行ロジックを作成する最もクリーンな方法に触発されましたか? 私はこれを作りました

    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