跟进问题: Cleanest way to write retry logic?
在答案中,定义了一个重试函数的泛型类,并将其用作:
php artisan migrate
如何实现泛型重试,构造函数也可以抛出?
所以我不只是想重试:
Retry.Do(() => SomeFunctionThatCanFail(), TimeSpan.FromSeconds(1));
我想以通用的方式重试以下块:
SomeFunctionThatCanFail()
答案 0 :(得分:3)
构造函数也可以抛出?
一般来说,这是一个坏主意。我建议看看工厂模式:
public class SomeClass
{
private SomeClass()
{
}
public static SomeClass GetInstance()
{
// Throw Exception here, not in constructor
}
public void SomeFunctionThatCanFail()
{
}
}
现在你可以做到:
Retry.Do(() =>
SomeClass.GetInstance().SomeFunctionThatCanFail(),
TimeSpan.FromSeconds(1));
答案 1 :(得分:0)
我没有意识到我可以将一段代码放入Lambda表达式中。这正是我想要的:
Retry.Do(() => { using (DataBaseProxy db = new DataBaseProxy(dbList.Next())) { .DoSomething(); } }, new TimeSpan(0));