1

从这里的问题跟进: 编写重试逻辑的最干净的方法?

在答案中,定义并使用了一个用于重试函数的泛型类:

Retry.Do(() => SomeFunctionThatCanFail(), TimeSpan.FromSeconds(1));

您将如何实现通用重试,构造函数也可以抛出?

所以我不想重试:

   SomeFunctionThatCanFail() 

我想以通用方式重试以下块:

   SomeClass sc = new SomeClass();
   sc.SomeFunctionThatCanFail();
4

2 回答 2

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));
于 2016-12-21T21:11:12.137 回答
0

我没有意识到我可以将一段代码放入 Lambda 表达式中。这正是我想要的:

Retry.Do(() => { using (DataBaseProxy db = new DataBaseProxy(dbList.Next())) { .DoSomething(); } }, new TimeSpan(0));
于 2016-12-22T02:19:28.903 回答