日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Polly 重试策略

發布時間:2024/4/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Polly 重试策略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工作原理

Retry

基本重試:

public static void Retry() {var random = new Random();// Policy<> 泛型定義返回值類型, 如若不需要返回值, 可直接使用 Policyvar obj = Policy<object>// Handle<> 可指定需要處理的異常類型.Handle<Exception>()//也可以使用重載對Exception 進行再次過濾//.Handle<Exception>(e => e is NotSupportedException) .Retry(3, (res, i, c) =>{//當委托的代碼塊執行失敗時會進入此 Action, //這里可以對拋出的異常進行日志或其他處理Console.WriteLine($"retry {i}th times, ex: {res.Exception?.Message}");}).Execute(() =>{var val = random.Next(0, 100);switch (val % 3){case 0:return "Success";default:throw new Exception($"random val: {val}");}});Console.WriteLine(obj); }

輸出:

重試一次成功:

重試兩次成功:

重試三次均失敗:

可以看到,再超過重試次數的時候, 若程序還是異常,則拋出異常。

RetryForever

成功前一直重試:

public static void RetryForever() {var random = new Random();// Policy<> 泛型定義返回值類型, 如若不需要返回值, 可直接使用 Policyvar obj = Policy<object>// Handle<> 可指定需要處理的異常類型.Handle<Exception>()//也可以使用重載對Exception 進行再次過濾//.Handle<Exception>(e => e is NotSupportedException) .RetryForever((res, i, c) =>{//當委托的代碼塊執行失敗時會進入此 Action, //這里可以對拋出的異常進行日志或其他處理Console.WriteLine($"retry {i}th times, ex: {res.Exception?.Message}");}).Execute(() =>{var val = random.Next(0, 100);switch (val % 999){case 0:return $"Success, val: {val}";default:throw new Exception($"random val: {val}");}});Console.WriteLine(obj); }

輸出:

將 case 0: 這個分支去掉, 任務將變為不可能成功,會發現一直輸出重試。

WaitAndRetry

程序異常后做短暫延遲再次重試:

.WaitAndRetry(5, // 設置 Sleep Duration Provider 來提供延遲時間retryTimes => TimeSpan.FromSeconds(Math.Pow(2, retryTimes)),(res, delay, times, context) =>{//當委托的代碼塊執行失敗時會進入此 Action, //這里可以對拋出的異常進行日志或其他處理Console.WriteLine($"retry {times}th times, sleep: {delay.TotalSeconds}s, ex: {res.Exception?.Message}");})

可以看到我們在 WaitAndRetry 方法中提供了延遲方式: retryTimes => TimeSpan.FromSeconds(Math.Pow(2, retryTimes)),, 這是一種比較典型的延遲方式,叫做 指數退避。

輸出:

WaitAndRetryForever

.WaitAndRetryForever(// 設置 Sleep Duration Provider 來提供延遲時間(retryTimes, res, context) => TimeSpan.FromSeconds(Math.Pow(2, retryTimes)),(res, times, delay, context) =>{//當委托的代碼塊執行失敗時會進入此 Action, //這里可以對拋出的異常進行日志或其他處理Console.WriteLine($"retry {times}th times, sleep: {delay.TotalSeconds}s, ex: {res.Exception?.Message}");})

僅僅與 WaitAndRetry 的 SleepDurationProvider 的參數有點不同

小結

此篇大體概括了 Polly 重試的幾種方式, 當然 Polly Retry 還有很多重載, 但作用都是圍繞 程序異常時進行自我調整再重試 為中心。

轉載于:https://www.cnblogs.com/rajesh/p/10773564.html

總結

以上是生活随笔為你收集整理的Polly 重试策略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。