c# - 使用 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 这样的定期作业调度程序的一个优点是,如果其中一个执行崩溃,下一个调度的调用仍将运行。无论您的解决方案是什么,您都应该考虑如果定期作业的一次执行失败,您希望发生什么。
推荐阅读
- docker - 如何解决“Couldn't start vault with IPC_LOCK. Disabling IPC_LOCK”和“Cluster address must be set when using raft storage”错误?
- angularjs - 哪个所见即所得编辑器与 angularjs 1.4.6 版兼容?
- koa - 如何拥有可配置数量的中间件处理程序?
- javascript - 如何将 iframe 移到 div 后面?css
- ssms - 我想从我的数据中获取上一年和一个月的 ID,但结果不正确
- node.js - 考试时间表:Node js
- reactjs - SSL 证书已通过浏览器验证但无法获取
- c# - 如何在面板中的许多其他标签中找到特定标签?
- svelte - 在 SvelteKit 中动态加载 Markdown 文件
- 3d - 除了 linerender 之外,有没有办法在 Ui 内部统一绘制形状?