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 條件。
額外:要了解您的代碼可以生成和捕獲什么樣的異常,請使用智能感知,這是您的朋友:

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
});

TA貢獻1821條經驗 獲得超6個贊
恐怕你試圖在錯誤的地方解決這個問題。如果您對 API 的請求由于令牌過期而失敗,您應該只拋出異常。
另一個類,也許是首先負責發起請求的類,可以解決錯誤(刷新令牌)并重試請求數據。
如果您將所有這些職責合并到一個地方,事情可能會很快變得復雜。
- 3 回答
- 0 關注
- 195 瀏覽
添加回答
舉報