Algorithm 当循环中出现异常时,在继续下一次迭代之前,尝试操作3次(有限次)的最佳方式是什么?

Algorithm 当循环中出现异常时,在继续下一次迭代之前,尝试操作3次(有限次)的最佳方式是什么?,algorithm,loops,file-io,exception-handling,Algorithm,Loops,File Io,Exception Handling,我有一个循环,在每次迭代中执行一个操作(PDF生成) 如果在一次迭代中出现异常(生成PDF时),我想再试3次;在我进入下一个迭代/记录之前 最好的方法是什么 谢谢。一种简单的方法是在主循环中使用do/嵌套循环,并在主循环中计算重试次数,如下所示: foreach (var item in allReportingItems) { var retries = 0; var reportIsGenerated = false; do { reportIsGe

我有一个循环,在每次迭代中执行一个操作(PDF生成)

如果在一次迭代中出现异常(生成PDF时),我想再试3次;在我进入下一个迭代/记录之前

最好的方法是什么


谢谢。

一种简单的方法是在主循环中使用
do
/
嵌套循环,并在主循环中计算重试次数,如下所示:

foreach (var item in allReportingItems) {
    var retries = 0;
    var reportIsGenerated = false;
    do {
         reportIsGenerated = TryGeneratingReport(item);
         retries++;
        // The loop will end when the report gets generated
        // or when the retries count would be exhausted
    } while (!reportIsGenerated && retries < 3);
    if (!reportIsGenerated) {
        Concole.Error.WriteLine(
            "Unable to generate report for {0} after 3 retries", item
        );
    }
}
foreach(所有ReportingItems中的变量项){
var重试次数=0;
var reportIsGenerated=false;
做{
reportIsGenerated=TryGeneratingReport(项目);
重试++;
//循环将在生成报告时结束
//或者当重试次数耗尽时
}而(!reportIsGenerated&&retries<3);
如果(!reportIsGenerated){
Concole.Error.WriteLine(
“重试3次后无法为{0}生成报告”,项
);
}
}

基本上,您可以使用for循环来计算尝试次数

在伪代码中:

for each action
  success = false
  for tries = 0; tries < 3 && !success; tries++
    success = doAction(action)
每个动作的

成功=错误
for=0;尝试<3&!成功;尝试++
成功=行动(行动)
或者,除例外情况外:

for each action
  success = false
  for tries = 0; tries < 3 && !success; tries++
    try
      doAction(action)
      success = true
    catch exception
      // do nothing
每个动作的

成功=错误
for=0;尝试<3&!成功;尝试++
尝试
行动
成功=正确
捕获异常
//无所事事

旁注:通常,创建PDF文件是一个确定的操作(如果不涉及用户交互),每次都会产生相同的结果。再次尝试很可能会浪费时间,一事无成。如果存在用户交互:用户不喜欢他们无法控制的软件。如果该软件总是尝试三次,即使用户想要取消,他们也不会使用该软件,或者会向任何人和所有人抱怨。将#dasblinkenlight标记为答案,因为这更适合我现有的代码,考虑到我的尝试捕获设置方式。回答得很好,谢谢。