Algorithm 当循环中出现异常时,在继续下一次迭代之前,尝试操作3次(有限次)的最佳方式是什么?
我有一个循环,在每次迭代中执行一个操作(PDF生成) 如果在一次迭代中出现异常(生成PDF时),我想再试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
谢谢。一种简单的方法是在主循环中使用
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标记为答案,因为这更适合我现有的代码,考虑到我的尝试捕获设置方式。回答得很好,谢谢。