gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:43:25 27 4
gpt4 key购买 nike

我已经阅读了 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com