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

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


汪汪一只猫
浏览 207回答 2
2回答

哔哔one

Polly 并非设计为 Cron 作业工具,并且有意不针对该用例。Polly 的重试重点是单个操作的弹性(重试直到成功)而不是重复调用成功的东西)。对于其他选项(如果有用):如果执行之间的延迟足以在执行之间释放执行资源(线程或堆栈),请考虑:在经典的 ASP.NET 中,HangFire等工具在 .NET Core 2.1 中,带有托管服务的后台任务如果延迟足够小(比如每 5 秒一次),不值得释放和重新获取执行资源,您可以简单地使用具有延迟的无限循环。例如,如果异步:while (true){    // Do my repeated work    await Task.Delay(TimeSpan.FromSeconds(5));}如果你想取消(优雅地结束一个程序),当然你可以用取消来扩展它:// for some CancellationToken cancellationTokenwhile (!cancellationToken.IsCancellationRequested){    // Do my repeated work    await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken);}定期作业调度程序(例如 HangFire)的一个优点是,如果其中一个执行崩溃,下一个调度调用仍将运行。无论您采用何种解决方案,您都应该考虑如果定期作业的一次执行失败,您希望发生什么。

肥皂起泡泡

您最好使用适用于像 Hangfire 这样的 CRON 作业的东西。但万一你真的想和波莉一起做。这是您如何做到的。&nbsp;await Policy&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .HandleResult<bool>(c => c == false)&nbsp; //you can add other condition&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .WaitAndRetryForeverAsync(i => TimeSpan.FromMinutes(i))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .ExecuteAsync(async () =>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; await DoSomethingAsync();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; //return false to stop execution&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });https://github.com/App-vNext/Polly/wiki/Retry#retry-to-refresh-authorization
打开App,查看更多内容
随时随地看视频慕课网APP