我正在尝试在.Net Core 3.1(Azure Functions v3)中设置Polly。
我想在Startup类中创建一个Policy,可以将其注入函数中。
我正在寻找的行为是:它应该WaitAndRetryAsync 3次-如果最后一次尝试失败-它应该捕获并记录此异常(Serilog),否则继续。
此刻我有:
AsyncRetryPolicy emailRetryPolicy = Policy.Handle<Exception>()
.WaitAndRetryAsync(3, retryAttempt =>
TimeSpan.FromMilliseconds(retryAttempt * 500));
如您所见,我错过了3次尝试记录错误的部分-然后继续。任何想法如何做到这一点?
Serilog也已添加到Startup类中(显示了部分代码)
builder.Services.AddLogging(al => al.AddSerilog(logger));
我将使用MailKit发送电子邮件,并希望记录由于某种原因而失败的电子邮件。它不应停止程序运行。
重试策略以下列方式工作:
根据要使用此重试策略包装的业务逻辑,您有以下两个选择:
Policy.Wrap
链接在一起,但要注意顺序。样本后备策略:
var fallbackPolicy = Policy<YourResponse>
.Handle<Exception>()
.FallbackAsync( (ct) =>
{
logger.LogError("Operation has been failed after several retries ...");
return Task.FromResult(new YourResponse { ... });
});
var combinedPolicy = Policy.WrapAsync(fallbackPolicy, retryPolicy);
onRetryAsync
的AsyncRetryPolicy
回调示例重试策略:
var retryPolicy = Policy
.Handle<Exception>()
.WaitAndRetryAsync(
settings.RetryCount,
_ => TimeSpan.FromMilliseconds(settings.SleepDurationInMilliseconds),
onRetryAsync: (ex, count, context) =>
logger.LogError("Operation has been failed after several retries ...");
);