1

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

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

做这个的最好方式是什么?

谢谢。

4

2 回答 2

1

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

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
        );
    }
}
于 2013-10-24T15:17:00.643 回答
1

您基本上可以只使用一个 for 循环来计算尝试次数。

在伪代码中:

for each action
  success = false
  for tries = 0; tries < 3 && !success; tries++
    success = doAction(action)

或者,有例外:

for each action
  success = false
  for tries = 0; tries < 3 && !success; tries++
    try
      doAction(action)
      success = true
    catch exception
      // do nothing
于 2013-10-24T15:17:12.060 回答