c# - 构造函数可以抛出代码的通用重试逻辑

标签 c# retry-logic

跟进这里的问题: Cleanest way to write retry logic?

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

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

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

所以我不只是想重试:

   SomeFunctionThatCanFail() 

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

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

最佳答案

where the constructor can throw also?

通常这是个坏主意。我建议查看工厂模式:

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));

关于c# - 构造函数可以抛出代码的通用重试逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271796/

相关文章:

c# - 在 Excel 中禁用复制(ctrl+c)、粘贴(ctrl+v)、剪切(ctrl+x)

c# - ExecuteNonQuery 中的 SqlException

java - 如何实现无损 grpc-streaming 调用?

ruby-on-rails - Ruby - 具有不同参数的重试函数

c# - 应该在哪个项目中使用事件溯源实时读取 DDD 中的模型(投影)?

c# - MVC - Controller - 进行简单的数学计算 - 变量 + 1

c# - 每 2 秒更新一次 WPF GUI (C#)

c# - RateLimiting - 不正确的限制

ruby - 重试语句在 Ruby 中如何工作?