如何使用polly实施重试逻辑,以重试永久性地永久执行某个函数,但不处理任何异常。这种情况是反复获取状态信息,但没有预期的例外。
答案 0 :(得分:2)
Polly并非被设计为Cron-job工具,并且故意不针对该用例。 Polly的重试重点是单个操作的弹性(重试直到成功),而不是反复调用成功的事物。
其他选项(如果有用):
如果两次执行之间的延迟足以让您释放两次执行之间的执行资源(线程或堆栈),请考虑:
如果延迟足够小(例如每5秒钟一次),不值得释放和重新获得执行资源,则可以简单地使用带有延迟的无限循环。例如,如果异步:
while (true)
{
// Do my repeated work
await Task.Delay(TimeSpan.FromSeconds(5));
}
如果您想取消(以正常方式结束程序),当然可以通过取消来扩展它:
// for some CancellationToken cancellationToken
while (!cancellationToken.IsCancellationRequested)
{
// Do my repeated work
await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken);
}
诸如HangFire之类的定期作业调度程序的一个优点是,如果其中一个执行崩溃,则下一个调度的调用仍将运行。无论采用哪种解决方案,都应该考虑如果定期作业的一次执行失败会发生什么情况。
答案 1 :(得分:0)
您最好使用适用于 Hangfire 等 CRON 作业的工具。
但万一你真的想和波莉一起做。 这是您的方法。
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
});
https://github.com/App-vNext/Polly/wiki/Retry#retry-to-refresh-authorization