2

我已经浏览了 Polly 框架的文档和示例,它真的很棒而且使用简单!

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

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

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

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

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

4

1 回答 1

5

您可以创建一个类来接受 aFuncAction您希望 Polly 调用的代码。

像这样的辅助方法:

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")
于 2017-12-06T10:11:47.473 回答