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

          歡迎訪問 生活随笔!

          生活随笔

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

          编程问答

          Polly 重试策略

          發布時間:2024/4/13 编程问答 43 豆豆
          生活随笔 收集整理的這篇文章主要介紹了 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 重试策略的全部內容,希望文章能夠幫你解決所遇到的問題。

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