使用 Polly 库实现重试逻辑,重复处理无异常



如何使用 polly 实现重试逻辑,以永久重试执行函数,但有一些延迟,但不处理异常。 方案是重复获取状态信息,但没有预期的异常。

Polly 不是作为 Cron-job 工具设计的,并且故意不针对该用例。 Polly 的重试重点是单个操作的复原能力(重试直到成功(,而不是重复调用成功的操作(。


对于其他选项(如果有用(:

如果执行之间的延迟足以让您希望在执行之间释放执行资源(线程或堆栈(,请考虑:

  • 在经典 ASP.NET 中,诸如HangFire之类的工具
  • 在 .NET Core 2.1 中,托管服务的后台任务

如果延迟足够小(例如每 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(的一个优点是,如果其中一个执行崩溃,下一个调度调用仍将运行。 无论您的解决方案是什么,您都应该考虑在定期作业的一次执行失败时要发生的情况。

你最好使用一些适用于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
});

https://github.com/App-vNext/Polly/wiki/Retry#retry-to-refresh-authorization

相关内容

  • 没有找到相关文章

最新更新