亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

出現異常時再次執行代碼的最佳方法是什么?

出現異常時再次執行代碼的最佳方法是什么?

C#
江戶川亂折騰 2021-06-04 14:02:37
我正在開發一個應用程序,因此我需要使用具有與之關聯的令牌的 Rest API。在特定時間間隔后,令牌已過期,因此在這種情況下,假設我嘗試調用該 API 會引發異常。因此,要解決此問題,我應該刷新 catch 塊中的令牌并使用 GoTo 再次執行 try 塊。我閱讀了幾篇文章,其中大部分都建議避免使用 GoTo。
查看完整描述

3 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

只需在您的邏輯中放置一個重試計數并繼續跳到循環的下一次迭代:


 int maxRetry = 10;

        for (int i = 0; i<=maxRetry; i++)

        {

            try

            {

                //DO YOUR STUFF

            }

            catch (Exception)

            {

                //OH NOES! ERROR!

                continue; //RETRY!

            }

        }

當它嘗試了 10 次后,它就會退出,僅此而已。


您可以使用任何您喜歡的循環、while、do while 等來釋放您的幻想。使用適合您需求的循環。


如果有一些非常嚴重的錯誤需要停止循環的執行然后中斷然后拋出異常并使用


  catch(VeryWrongException ex)

  {

      throw;

  } 

  catch (Exception)

  {

       //OH NOES! ERROR!

       continue; //RETRY!

  }

其中,VeryWrongException 是您要實際管理的異常類型,而不是使用之前的 catch 條件。


額外:要了解您的代碼可以生成和捕獲什么樣的異常,請使用智能感知,這是您的朋友:

http://img1.sycdn.imooc.com//60bad55300017a0305390177.jpg

查看完整回答
反對 回復 2021-06-05
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

如果使用不當,使用 GoTo 重試相同邏輯的 Catch 語句可能會很危險。


處理此問題的更好方法是編寫一些重試邏輯,該邏輯將嘗試執行您的任務有限的次數,理想情況下允許您指定您的異常。


如果你不想自己寫重試邏輯,我可以推薦你使用外部庫,比如Polly


其用法示例如下:


// Set up the policy

var retryPolicy = Policy

    .Handle<Exception>()

    .WaitAndRetry(

    3,

    retryAttempt => TimeSpan.FromSeconds(5 * retryAttempt)

    );


// Attempt to send the message, use Polly to retry a maximum of three times.

retryPolicy.Execute(() =>

{

    // Your Code

});


查看完整回答
反對 回復 2021-06-05
?
達令說

TA貢獻1821條經驗 獲得超6個贊

恐怕你試圖在錯誤的地方解決這個問題。如果您對 API 的請求由于令牌過期而失敗,您應該只拋出異常。

另一個類,也許是首先負責發起請求的類,可以解決錯誤(刷新令牌)并重試請求數據。

如果您將所有這些職責合并到一個地方,事情可能會很快變得復雜。


查看完整回答
反對 回復 2021-06-05
  • 3 回答
  • 0 關注
  • 195 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號