c# - 当出现异常时,再次执行代码的最佳方法是什么?
问题描述
我正在开发一个应用程序,因为我需要使用具有与之关联的令牌的 Rest API。在令牌获取过期的特定时间间隔之后,因此在这种情况下假设如果我尝试调用该 API,它会引发异常。因此,要解决此问题,我应该刷新 catch 块中的令牌并使用 GoTo 再次执行 try 块。我阅读了几篇文章,其中大多数建议避免使用 GoTo。
以下是我参考的最佳方法链接,但仍然不相信是否使用它:
1>是否可以在 catch 块中捕获异常后再次执行 try 块中的代码?
2> https://blogs.msdn.microsoft.com/abhinaba/2005/10/01/c-try-and-retry/
解决方案
只需在逻辑中输入重试计数并继续跳到循环的下一次迭代:
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等。使用适合你需要的循环。
如果有一些非常糟糕的错误需要停止循环的执行,那么 break 然后抛出异常并使用
catch(VeryWrongException ex)
{
throw;
}
catch (Exception)
{
//OH NOES! ERROR!
continue; //RETRY!
}
其中 VeryWrongException 是您要实际管理的异常类型,而不是使用前面的 catch 条件。
额外:要了解您的代码可以生成什么样的异常并捕获它们,请使用智能感知,这是您的朋友:
推荐阅读
- android - 为什么我的 androidx 检测测试套件进程崩溃?
- node.js - 另一个不明白的 Node.js 新手
- r - 如何制作运动物体的速度曲线?
- date - 为什么我的 MSDOS 应用程序显示 Unix 文件的日期是 20 天?
- c++ - 使用 Embarcadero Rad Studio 在 C++ 中包含 .a iOS 库
- android - 如果视图在直接父视图的边界之外进行动画处理,则 onTouchListener() 没有响应
- ios - 在单元格中加载时隐藏/显示@IBOUlet @IBAction
- c - 从 txt 文件中读取 3 维数组
- javascript - 如何在电子上管理 CPU 密集型任务
- android - 使用没有清单的主题 - 尽管声明了主题,但应用程序崩溃