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 关注
- 167 浏览
添加回答
举报