灵感来自Cleanest way to write retry logic?我做了这个
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;
}
但是我遇到了 method group问题。
测试设置
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);
之外,还有没有更好的方法来解决这个问题?
最佳答案
您可以将重试
更改为
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));
关于c# - 修复委托(delegate)的 'method group' 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16375901/