2 回答

TA貢獻(xiàn)1854條經(jīng)驗 獲得超8個贊
Polly 并非設(shè)計為 Cron 作業(yè)工具,并且有意不針對該用例。Polly 的重試重點(diǎn)是單個操作的彈性(重試直到成功)而不是重復(fù)調(diào)用成功的東西)。
對于其他選項(如果有用):
如果執(zhí)行之間的延遲足以在執(zhí)行之間釋放執(zhí)行資源(線程或堆棧),請考慮:
在經(jīng)典的 ASP.NET 中,HangFire等工具
在 .NET Core 2.1 中,帶有托管服務(wù)的后臺任務(wù)
如果延遲足夠?。ū热缑?5 秒一次),不值得釋放和重新獲取執(zhí)行資源,您可以簡單地使用具有延遲的無限循環(huán)。例如,如果異步:
while (true)
{
// Do my repeated work
await Task.Delay(TimeSpan.FromSeconds(5));
}
如果你想取消(優(yōu)雅地結(jié)束一個程序),當(dāng)然你可以用取消來擴(kuò)展它:
// for some CancellationToken cancellationToken
while (!cancellationToken.IsCancellationRequested)
{
// Do my repeated work
await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken);
}
定期作業(yè)調(diào)度程序(例如 HangFire)的一個優(yōu)點(diǎn)是,如果其中一個執(zhí)行崩潰,下一個調(diào)度調(diào)用仍將運(yùn)行。無論您采用何種解決方案,您都應(yīng)該考慮如果定期作業(yè)的一次執(zhí)行失敗,您希望發(fā)生什么。

TA貢獻(xiàn)1829條經(jīng)驗 獲得超6個贊
您最好使用適用于像 Hangfire 這樣的 CRON 作業(yè)的東西。
但萬一你真的想和波莉一起做。這是您如何做到的。
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
- 2 回答
- 0 關(guān)注
- 244 瀏覽
添加回答
舉報