“重试”的实现
在软件开发中,经常会有这样一种需求:当发生异常、特殊情况、失败等条件的时候,重试执行,最大重试次数为N次。如果超过N次还是没有成功,则跳过。
这个问题常常常常令人感觉有些棘手,因为java没哟goto,而且要对次数、失败条件进行判断比较等。
在此做深入分析:
重试,意味着代码要反复执行,需要做循环。
当特殊条件出现才反复,则需要判断特殊条件,需要if语句。
有最大次数限制,说明循环有最大次数n<?。
没有成功、跳过,说明程序没有因为特殊情况挂掉,要捕获异常和特殊情况。在特殊条件发生时做一些补救(重试处理)。
针对谁上面的分析再写代码就容易很多了:
通常会将最大重试次数作为系统的参数让用户配置,并且对数据范围做处理。
下面是伪代码:
......
int redo = 0; //重试次数
while(redo<MAXTRY+1){ //MAXTRY为最大重试次数
try{
doSomething(); //可能发生特殊情况的方法
break; //执行成功后直接退出此循环
} catch{
redo++; //异常时,重试次数增加
continue; //结束本次循环
}
}
......
int redo = 0; //重试次数
while(redo<MAXTRY+1){ //MAXTRY为最大重试次数
try{
doSomething(); //可能发生特殊情况的方法
break; //执行成功后直接退出此循环
} catch{
redo++; //异常时,重试次数增加
continue; //结束本次循环
}
}
......
此方式适合Java、C#、C++等语言。