我有一个循环,它在每次迭代中执行一个动作(PDF 生成)
如果在一次迭代中出现异常(在生成 PDF 时),我想再试 3 次;在我继续下一个迭代/记录之前。
做这个的最好方式是什么?
谢谢。
我有一个循环,它在每次迭代中执行一个动作(PDF 生成)
如果在一次迭代中出现异常(在生成 PDF 时),我想再试 3 次;在我继续下一个迭代/记录之前。
做这个的最好方式是什么?
谢谢。
一种简单的方法是在主循环中使用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
);
}
}
您基本上可以只使用一个 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