c# - Polly 库的包装器,以便实现可以保留在一个地方

标签 c# oop polly

我已经阅读了 Polly 库的文档和示例,它真的很棒而且易于使用!!

就我而言,我想将所有异常分为 3 种类型:临时、永久和日志。现在,我想要一段代码,负责通过使用 Polly 库进行等待和重试来处理本质上是临时的错误。

  WaitAndRetryAsync(new[]{
                    TimeSpan.FromSeconds(1),
                    TimeSpan.FromSeconds(2),
                    TimeSpan.FromSeconds(5)
                  })

同样的方式,如果某些东西本质上是永久的(应该能够根据我们尝试处理的异常知道它的类型,例如:超时可以是临时的,但如果数据库信用不正确,那么它是永久的),那么我们可以发送发送电子邮件给支持人员。

现在,问题从这里开始,我如何使用接口(interface)或抽象类包装它,以便我的所有派生类都可以传递异常以及方法名称,该异常可以传递到我的新框架及其将做需要的事情。

任何指点都会有很大帮助!

最佳答案

您可以创建一个类,该类接受您希望 Polly 调用的代码的 FuncAction

类似于这个辅助方法:

public class RetryWrapper
    {
        public static TOutput Execute<TInput, TOutput>(Func<TInput, TOutput> func, TInput input)
        {
            RetryPolicy retryPolicy = Policy.Handle<TimeoutException>()
                .Or<OtherException>()
                .WaitAndRetry(3, x => new TimeSpan(0, 0, 2));

            return retryPolicy.Execute(() => func(input));
        }
    }

然后就可以调用了

var result = RetryWrapper.Execute<string, bool>(x => MethodToCall(x), "input")

关于c# - Polly 库的包装器,以便实现可以保留在一个地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47670390/

相关文章:

c# - 记录 Polly 等待和重试策略 ASP.NET CORE 2.1

c# - LINQ中的include方法用于Left Join?

java - 处理数组中的对象时出现越界

c# - 如何使用 Moq 从 IHttpClientFactory 模拟 HTTPClient 并结合 .NET Core 中的 Polly 策略

c# - 使用最小起订量测试 Polly 重试策略

c# - 使用一些默认值构建 XML 的最佳方法

c# - 在 Moles 下从 ReSharper 启动 xunit 测试

c# - 如何为字符串格式提供自定义字符串占位符

c# - Rx - 在新线程上消耗每个项目

javascript OOP 不工作 : Uncaught TypeError: object is not a function