Tru*_*der 9 c# polly retry-logic
如何使用 polly 实现重试逻辑,以在有一定延迟的情况下永远重试执行函数,但不处理异常。该场景是重复获取状态信息但没有预期的异常。
mou*_*ler 10
Polly 并非设计为 Cron-job 工具,并且有意不针对该用例。Polly 的重试重点是单个操作的弹性(重试直到成功),而不是重复调用确实成功的事情)。
对于其他选项(如果有用):
如果执行之间的延迟足够大,您希望在执行之间释放执行资源(线程或堆栈),请考虑:
如果延迟足够小(例如每 5 秒),不值得释放并重新获取执行资源,则可以简单地使用带有延迟的无限循环。例如,如果异步:
while (true)
{
// Do my repeated work
await Task.Delay(TimeSpan.FromSeconds(5));
}
Run Code Online (Sandbox Code Playgroud)
如果你想取消(优雅地结束程序),当然你可以通过取消来扩展它:
// for some CancellationToken cancellationToken
while (!cancellationToken.IsCancellationRequested)
{
// Do my repeated work
await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken);
}
Run Code Online (Sandbox Code Playgroud)
HangFire 等定期作业调度程序的优点之一是,如果其中一个执行崩溃,下一个计划的调用仍将运行。无论您采用哪种解决方案,您都应该考虑如果定期作业的一次执行失败,您希望发生什么情况。
您最好使用适用于 CRON 作业的东西,例如 Hangfire。
但万一你真的想和波莉一起做呢。以下是您可以如何做到这一点。
await Policy
.HandleResult<bool>(c => c == false) //you can add other condition
.WaitAndRetryForeverAsync(i => TimeSpan.FromMinutes(i))
.ExecuteAsync(async () =>
{
await DoSomethingAsync();
return true; //return false to stop execution
});
Run Code Online (Sandbox Code Playgroud)
https://github.com/App-vNext/Polly/wiki/Retry#retry-to-refresh-authorization