catch到异常之后能不能再重新执行try里面的语句啊?

推倒小十六再说 2019-05-06 09:58:25
网站服务器访问高峰期的时候经常一次连接不到,要刷新几次才能连接到的那种
代码是这样

var webClient = new HtmlWeb();
var html = webClient.Load(url);


就是load(url)的时候总是要多试几次才行,可不可以这样
try{var html = webClient.Load(url);}

然后catch到异常之后再返回重新执行try里面的语句?我不会写求助高人
...全文
2185 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 25 楼 千里送人头 的回复:
楼主,你的思路肯定是错了,程序不能这么去执行的,给一下实际场景,我们帮你看看怎么去实现


谢谢!我也不知道该怎么说明了,总之就是连接服务器的时候有时候会报异常,就是连接服务器超时了。可惜这里不能留联系方式啊- -

可以看一下这个例子https://blog.csdn.net/ahilll/article/details/82908811,就第一个例子这样。
这两天我得到了2个思路,一个是用Polly处理异常,另外就是给这个方法设置一个管理线程监督他,如果超过几秒方法没有返回值的话就kill
掉这个线程再重新执行这个方法。
千里送人头 2019-05-08
  • 打赏
  • 举报
回复
楼主,你的思路肯定是错了,程序不能这么去执行的,给一下实际场景,我们帮你看看怎么去实现
FainSheeg 2019-05-08
  • 打赏
  • 举报
回复
用递归,但是加个重试次数
ZHANGSENSE 2019-05-08
  • 打赏
  • 举报
回复
可以,,用try 嵌套就行
wanghui0380 2019-05-07
  • 打赏
  • 举报
回复
这个不建议用同步,微软默认访问url的超时时间基本在40-60s,如果使用同步访问(并且是主进程)这个会卡UI,跟何况是还需要重试多长时间
  • 打赏
  • 举报
回复
引用 9 楼 wanghui0380 的回复:
C#之路任重道远啊

polly库是个选择

不过这东西,自己写也简单,不过是因为是“现代语法”,俺们C#程序员还是得跟上步伐

async Task<string> geturl(string url, CancellationToken token, int count = 3)
{
CancellationTokenSource _cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(token);

for (int i = 0; i < count; i++)
{
//外部放弃条件条件,比如主动放弃,比如设定最大等待时间
_cancellationTokenSource.Token.ThrowIfCancellationRequested();

HttpClient client = new HttpClient();
try
{
var s = await client.GetStringAsync(url);
return s;
}
catch (Exception e)
{

}

}

throw new TimeoutException("3重试未响应");
}

可不可以不用异步,再设置一个等待时间?
  • 打赏
  • 举报
回复
引用 6 楼 水边2 的回复:
最多重试3次的代码,防止一直异常导致死循环。

HtmlDocument html = new HtmlDocument();
int cnt=0;
do
{
try { html = webClient.Load(url); cnt=10; }
catch (Exception e) { cnt++; }
} while (cnt<3);

能设置一个等待时间吗?
wanghui0380 2019-05-07
  • 打赏
  • 举报
回复
C#之路任重道远啊 polly库是个选择 不过这东西,自己写也简单,不过是因为是“现代语法”,俺们C#程序员还是得跟上步伐
async Task<string> geturl(string url, CancellationToken token, int count = 3)
        {
            CancellationTokenSource _cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(token);

            for (int i = 0; i < count; i++)
            {
                //外部放弃条件条件,比如主动放弃,比如设定最大等待时间         
                _cancellationTokenSource.Token.ThrowIfCancellationRequested();

                HttpClient client = new HttpClient();
                try
                {
                    var s = await client.GetStringAsync(url);
                    return s;
                }
                catch (Exception e)
                {
                    
                }

            }

            throw new TimeoutException("3重试未响应");
        }
  • 打赏
  • 举报
回复
nuget上搜索polly,查了这个异常弹性库的作用,你这问题就解决了
  • 打赏
  • 举报
回复
引用 20 楼 王于 的回复:
设置响应时间 超时重新走

请问是哪个类可以设置这个响应时间?
游北亮 2019-05-07
  • 打赏
  • 举报
回复
最多重试3次的代码,防止一直异常导致死循环。

HtmlDocument html = new HtmlDocument();
int cnt=0;
do
{
      try { html = webClient.Load(url); cnt=10; }
      catch (Exception e) { cnt++; }
} while (cnt<3);
xiaoyu5425 2019-05-07
  • 打赏
  • 举报
回复
加次数吧,catch到异常一直执行容易死循环
OrdinaryCoder 2019-05-07
  • 打赏
  • 举报
回复
引用 2 楼 推倒小十六再说 的回复:
[quote=引用 1 楼 秋的红果实 的回复:]
高峰期刷新几次才能连接到,这,不是发生异常,是请求没有到达,超时被丢弃


对的就是超时了,我改成这样了但试过之后好像有时候会卡死,怎么解决啊

HtmlDocument html = new HtmlDocument();
Boolean b;
do
{
try { html = webClient.Load(url); b = true; }
catch (Exception e) { b = false; }
} while (b == false);
[/quote]
异步去执行html = webClient.Load(url);这个操作吧 而且适当的退出条件也是必要的 比如加一个count 执行10次之后就退出 如果没有适当的退出条件 如果真的就连不上 比如断网 那么是不是会一直卡在这个循环中
  • 打赏
  • 举报
回复
设置响应时间 超时重新走
  • 打赏
  • 举报
回复
没指望了就这样吧,结贴了,以后找个人从Polly解决吧
摸瞎 2019-05-07
  • 打赏
  • 举报
回复
使用goto语句,再加一个计数的变量,可以实现
int num=0;
try
{
TODO:
........

}
catch
{
if(num<3)
{
num++;
goto TODO;
}
}
  • 打赏
  • 举报
回复
引用 7 楼 娃都会打酱油了 的回复:
nuget上搜索polly,查了这个异常弹性库的作用,你这问题就解决了


我装了,不知道为什么装不上咋办呀?
  • 打赏
  • 举报
回复
引用 12 楼 wanghui0380 的回复:
这个不建议用同步,微软默认访问url的超时时间基本在40-60s,如果使用同步访问(并且是主进程)这个会卡UI,跟何况是还需要重试多长时间

我都遇到好多次了每次都要等待将近1分钟,但是这个程序必须要等待这个html否则后面什么也做不了,卡UI也只能等下去...
如果设置重试3次,等待时间为5秒,可不可以帮忙写段代码啊?
橘子皮... 2019-05-06
  • 打赏
  • 举报
回复
b = flase:do try ... exit do catch ... end try loop
加载更多回复(2)

110,500

社区成员

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

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

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