异常之后,自动重新执行语句的问题

FainSheeg 2018-11-15 04:01:58
有如下一段代码:

For i=0 to list.count-1
语句a(i)
语句b(i)
语句c(i)
next

现在语句b(i)可能会抛出异常来,原因跟网络相关,有时候会超时异常之类的。要求如果抛出异常来则重新执行语句b(i),重试3次失败则退出,重试成功了则继续循环。请教各位大神,该如何设计最好?
想过用on error go to ,但是心里没底,感觉容易出岔子。
...全文
105 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
橘子皮... 2018-11-16
  • 打赏
  • 举报
回复
while (true){ try {...; break; } catch(exception) { // } }
FainSheeg 2018-11-16
  • 打赏
  • 举报
回复
引用 4 楼 qq_35288630 的回复:
[quote=引用 2 楼 yangliu0512 的回复:]
[quote=引用 1 楼 hanjun0612 的回复:]
try catch 在catch中去解决

感谢版主支持,如果是catch中解决的话:1.请问我该如何获取出错时的i值?2.没办法继续循环了。3.语句本来就有可以异常了,再放到catch中的话程序不直接崩溃了。[/quote]

赞成楼上计数器的方式,可以尝试一下这个思路
void Main()
{
for(int i = 0; i < 10; i++)
{
MyFunction(i);
}
}

void MyFunction(int para, int count = 10)
{
try
{
//TODO
} catch(Exception)
{
if (count > 0)
MyFunction(para, count - 1);
}
}
[/quote]

一开始没理解透,用递归的方法并不会让有可能异常的代码在catch块里执行,完美。感谢!!!
token不能为空 2018-11-16
  • 打赏
  • 举报
回复
引用 5 楼 yangliu0512 的回复:
[quote=引用 4 楼 qq_35288630 的回复:] [quote=引用 2 楼 yangliu0512 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] try catch 在catch中去解决
感谢版主支持,如果是catch中解决的话:1.请问我该如何获取出错时的i值?2.没办法继续循环了。3.语句本来就有可以异常了,再放到catch中的话程序不直接崩溃了。[/quote] 赞成楼上计数器的方式,可以尝试一下这个思路
void Main()
{
    for(int i = 0; i < 10; i++)
    {
        MyFunction(i);
    }
}

void MyFunction(int para, int count = 10)
{
    try
    {
        //TODO
    } catch(Exception)
    {
        if (count > 0)
            MyFunction(para, count - 1);
    }
}
[/quote]
引用 3 楼 stherix 的回复:
弄一个重试次数 计数器 循环里try catch ,出现异常就计数器++ 如果没异常或者计数器到达预定值就break
这个设计可以有,解决了获取i值的问题,解决了继续循环的问题,但是还是要在Catch分支里执行可能异常的语句,一但重试还是异常程序 就崩溃了。好纠结啊。[/quote] for(int i =0;i<10;i++) { try { 语句b(i) break; } catch() { //不处理 } } //超过重试上限情况
token不能为空 2018-11-16
  • 打赏
  • 举报
回复
catch里面通常是处理意外的异常的 你这种可以重现的情况最好是解决异常方法内部的问题
FainSheeg 2018-11-16
  • 打赏
  • 举报
回复
引用 4 楼 qq_35288630 的回复:
[quote=引用 2 楼 yangliu0512 的回复:]
[quote=引用 1 楼 hanjun0612 的回复:]
try catch 在catch中去解决

感谢版主支持,如果是catch中解决的话:1.请问我该如何获取出错时的i值?2.没办法继续循环了。3.语句本来就有可以异常了,再放到catch中的话程序不直接崩溃了。[/quote]

赞成楼上计数器的方式,可以尝试一下这个思路
void Main()
{
for(int i = 0; i < 10; i++)
{
MyFunction(i);
}
}

void MyFunction(int para, int count = 10)
{
try
{
//TODO
} catch(Exception)
{
if (count > 0)
MyFunction(para, count - 1);
}
}
[/quote]

引用 3 楼 stherix 的回复:
弄一个重试次数 计数器
循环里try catch ,出现异常就计数器++
如果没异常或者计数器到达预定值就break

这个设计可以有,解决了获取i值的问题,解决了继续循环的问题,但是还是要在Catch分支里执行可能异常的语句,一但重试还是异常程序 就崩溃了。好纠结啊。
wangyx92528 2018-11-15
  • 打赏
  • 举报
回复
引用 2 楼 yangliu0512 的回复:
[quote=引用 1 楼 hanjun0612 的回复:]
try catch 在catch中去解决

感谢版主支持,如果是catch中解决的话:1.请问我该如何获取出错时的i值?2.没办法继续循环了。3.语句本来就有可以异常了,再放到catch中的话程序不直接崩溃了。[/quote]

赞成楼上计数器的方式,可以尝试一下这个思路
void Main()
{
for(int i = 0; i < 10; i++)
{
MyFunction(i);
}
}

void MyFunction(int para, int count = 10)
{
try
{
//TODO
} catch(Exception)
{
if (count > 0)
MyFunction(para, count - 1);
}
}
stherix 2018-11-15
  • 打赏
  • 举报
回复
弄一个重试次数 计数器 循环里try catch ,出现异常就计数器++ 如果没异常或者计数器到达预定值就break
FainSheeg 2018-11-15
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
try catch 在catch中去解决

感谢版主支持,如果是catch中解决的话:1.请问我该如何获取出错时的i值?2.没办法继续循环了。3.语句本来就有可以异常了,再放到catch中的话程序不直接崩溃了。
正怒月神 2018-11-15
  • 打赏
  • 举报
回复
try catch 在catch中去解决

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧