如何调整以下Invoke
调用以满足返回void和非void类型的方法?
目前ErrorHandlingComponent.Invoke
期望Func<T>
作为其第一个参数。我发现当我试图传递一个void方法时,编译器会抱怨。
public static T Invoke<T>(Func<T> func, int tryCount, TimeSpan tryInterval)
{
if (tryCount < 1)
{
throw new ArgumentOutOfRangeException("tryCount");
}
while (true)
{
try
{
return func();
}
catch (Exception ex)
{
if (--tryCount > 0)
{
Thread.Sleep(tryInterval);
continue;
}
LogError(ex.ToString());
throw;
}
}
}
答案 0 :(得分:3)
你不能。 Func
委托的设计使其始终返回一些内容。
最简单的方法是创建Invoke
方法的重载,该方法需要Action
代理而不是Func
:
public static void Invoke(Action action, int tryCount, TimeSpan tryInterval)
{
if (tryCount < 1)
{
throw new ArgumentOutOfRangeException("tryCount");
}
while (true)
{
try
{
action();
return;
}
catch (Exception ex)
{
if (--tryCount > 0)
{
Thread.Sleep(tryInterval);
continue;
}
LogError(ex.ToString());
throw;
}
}
}