请教大佬这个死循环是怎么回事啊

推倒小十六再说 2019-06-04 04:39:49

var webClient = new HtmlWeb();
HtmlDocument html = new HtmlDocument();
bool isComplete = false;
do
{
try
{
Stopwatch watcher = new Stopwatch(); //计时器
Thread td = new Thread(() =>
{
html = webClient.Load(url); isComplete = true;
});
td.Start();
watcher.Start();
while (watcher.ElapsedMilliseconds < 5000 && isComplete == false) { Thread.Sleep(100); }
watcher.Stop();
if (isComplete == false) { td.Abort(); }
}
catch { Thread.Sleep(500); }
} while (isComplete == false);


每当报Abort异常的时候就总是重复报这个异常,就好像死循环了,我错在哪儿了?
...全文
1989 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
還是 2019-06-09
  • 打赏
  • 举报
回复
引用 4 楼 娃都会打酱油了 的回复:
你这逻辑就不对,你的whild是一直在开线程,然后去打开网页下载,正确的逻辑不应该是网页下载,然后等待结果么? 等待结果没必要用多线程等待吧?下载这东西又不受本地多线程影响的,反而受设置的Timeout影响……
对,哪有while死循环创建线程的。创建一个线程,死循环判断就可以了。
Fellon9 2019-06-09
  • 打赏
  • 举报
回复
楼主的思路很好,代码稍微能看懂,有一些问题不知楼主是怎么考虑的,如果使用错误网址或者网络故障你这就是一个死循环,并且你使用关线程的方法对吗,考没考虑过性能问题
qq_45012408 2019-06-08
  • 打赏
  • 举报
回复
有意思。。。。。。。。。。。,,,
Csdn技术大神 2019-06-07
  • 打赏
  • 举报
回复
缺少终止代码,确实是这样的
ZhuCheng Xie 2019-06-07
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
非常不错,有点意思
猜我 2019-06-06
  • 打赏
  • 举报
回复
引用 21 楼 货郎大叔 的回复:
isComplete == false =》 false == false =》 true do{ }while(true)
这个是正确的,缺少终止代码
货郎大叔 2019-06-06
  • 打赏
  • 举报
回复
isComplete == false =》 false == false =》 true do{ }while(true)
  • 打赏
  • 举报
回复
嘶,要不你再看看?一步一步调试?
ZhuCheng Xie 2019-06-06
  • 打赏
  • 举报
回复
没毛病!
weixin_42082006 2019-06-05
  • 打赏
  • 举报
回复
这个错误如何下载
angel6709 2019-06-05
  • 打赏
  • 举报
回复
代码没有这么写的啊
彦祖你来了 2019-06-05
  • 打赏
  • 举报
回复
放个放返回值啊
  • 打赏
  • 举报
回复
引用 14 楼 angel6709 的回复:
代码没有这么写的啊


大佬帮我改一改吧
  • 打赏
  • 举报
回复
引用 11 楼 wanghui0380 的回复:
另外,你这有个小bug,线程内部异常,你在外面try其实是抓不到的,这个的在线程里面处理


是Abort异常吗? 我不想处理啊。反正他一定是会报异常抓了也没啥用
你说外面抓不到Abort异常,那Thread.Sleep(500)就没用了吧
  • 打赏
  • 举报
回复
引用 10 楼 娃都会打酱油了 的回复:
Http服务响应超时时间受Timeout属性影响,你在外面再怎么执行多线程什么的都是没用的!!!!


啊啊是这样啊,好头疼
wanghui0380 2019-06-04
  • 打赏
  • 举报
回复
另外,你这有个小bug,线程内部异常,你在外面try其实是抓不到的,这个的在线程里面处理
  • 打赏
  • 举报
回复
Http服务响应超时时间受Timeout属性影响,你在外面再怎么执行多线程什么的都是没用的!!!!
wanghui0380 2019-06-04
  • 打赏
  • 举报
回复
我想他也不是一直都是5秒加载不出来,如果一直如此,你项目早改停了。 所以我想使用“指数退避”,别逼他,让他冷静一下。 还是男人和女人的故事,如果吵架了,最好是冷处理一下,别不停BB,那样得打起来 微软的建议也是如此 https://docs.microsoft.com/zh-cn/dotnet/standard/microservices-architecture/implement-resilient-applications/explore-custom-http-call-retries-exponential-backoff
  • 打赏
  • 举报
回复
引用 2 楼 wanghui0380 的回复:
额,你本来写的就是
“加载一个网页,5秒超时没完成就重试”------一直到重试成功


所以,没毛病啊。是按你的逻辑运行的,so,这个代码是不是你写的啊,那就是按你写的逻辑跑的


哦对了,本来就算连续报异常也应该是间隔开5.5秒的,可实际上大概只间隔了2、3秒钟,我想我是写错了可是怎么也想不通
加载更多回复(6)

110,538

社区成员

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

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

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