昨天调程序,开了几十个线程,总有几个出不了,后来发现是httpwebrequest的向网站的请求没有返回,一直等在那里出不来,后来设置了允许的并发连接数、连接的超时timeout的限定以及一些参数,果然,死的线程基本上没有了。但是发现偶尔会出现一两个还是会死在里面,特别是反复处理几批检索关键字后,偶尔会出现。于是我打开vs2010的多线程窗口,设置断点,在多线程窗口找到了死在那里的线程,并定位了死的语句,竟然是这一句。

死掉的线程语句

我赶紧在语句后面加了一个注释,哈哈。

然后查找ReadToEnd()的资料,终于找到了一个说法。

GetResponseStream之后,所得到的Stream,通过StreamReader去读取,用ReadToEnd或ReadLine,有时候会无限期的挂掉;

所以,希望:

StreamReader的ReadToEnd或ReadLine,支持Timeout

以达到:

不会无限期的挂掉,而是超时后,就终止

这样代码中就可以通过多次获取html,而最终避开此单次的获得html有误,而达到程序正常运行的目的了。

具体实现方式是:

在发送web请求之前,对于HttpWebRequest,就去设置对应的参数ReadWriteTimeout,StreamReader的timeout也做设置

其默认值是300000=300 seconds = 5 minutes

此处,我改为300000 = 30 seconds

然后,后续在正常的GetResponse后,再去获得GetResponseStream而得到Stream,

对于Stream,去通过StreamReader读取,使用ReadToEnd或ReadLine都可以。

这里这篇文章真的是描述得很仔细。

也是一位程序员碰到一样的问题的结局过程。

转载于:https://blog.51cto.com/haoduolang/1543604

昨天死线程的问题又找到了别的原因相关推荐

  1. 生于拉新,死于留存!如何找到 Aha moment?

    文章会涉及两个名词,所以在正文展开之前先简单的说下这两个名词,两个词分别是增长黑客.Aha moment. 下面的资料来源于 Wiki 百科: 成长骇客(Growth hacker),又译增长黑客.营 ...

  2. java 线程 handler,java.lang.RuntimeException:处理程序(android.os.Handler)在死线程上向处理程序发送消息...

    在我的应用程序中,我使用IntentService发送短信. @Override protected void onHandleIntent(Intent intent) { Bundle data ...

  3. 语言撒谎问题_孩子撒谎是高情商?四招帮家长找到孩子撒谎原因,纠正撒谎行为...

    随着孩子年龄的增长,孩子们学会了"撒谎".比如,说自己身体不舒服,不想去上课:忘记写作业,却说是老师没有留:偷偷改了考试成绩,好像考了高分,想要蒙混过关等等. 对于有撒谎行为的孩子 ...

  4. 电脑突然经常死机?(ubuntu系统如何检查原因)

    问题描述 台式机(我的是GPU服务器)突然发现隔3-5天就会死机一次,硬件重启后可以正常使用,但过几天又会死机. 原因分析 出现这种情况大概率不是系统或某个软件卡顿造成的,因为这两种死机情况一般不会很 ...

  5. 【跑飞、死机】单片机 msp430程序跑飞原因和解决方式积累

    目录 单片机 msp430程序跑飞原因和解决方式积累 MSP430 数组填充越界引起的栈溢出 导致程序跑飞 [单片机重启]MSP430重启/频繁重启/跑飞 原因分析 单片机 msp430程序跑飞原因和 ...

  6. 计算机无法找到组件c0000135,电脑开机显示无法找到组件的原因

    匿名用户 1级 2009-10-18 回答 症状:Lsass.exe无法找到入口,无法定位程序输入点LdrSetSessionName于动态链接库mfc40udll,上随即出现黑屏 ! 近日一个危险的 ...

  7. 斐讯的服务器不稳定,K1不稳定的原因找到了!原因是CPU时钟频率太高,要降频!...

    本帖最后由 ┢┦aΡpy 于 2016-7-20 22:25 编辑 但Breed Web 控制台时钟频率设置不能保存,降频重启后 CPU时钟频率 恢复580MHZ,怎么解决? 日志一直这样: Jul ...

  8. 找到: 没有参数 原因: 实际参数列表和形式参数列表长度不同

    Boot项目,运行时报错 定位到错误位置 解决方法 在User实体类中加上@NoArgsConstructor注解,成功运行

  9. STM32 BOOT0连接不当造成死机

    一下内容转自:http://www.360doc.com/content/14/0326/10/6624919_363817465.shtml STM32的三种启动方式依靠BOOT0和BOOT1两个引 ...

最新文章

  1. 对电商用户的数据分析!
  2. ieda中快捷搜索_IntelliJ IDEA IDE设置系列教程(十):在工具窗口中快速搜索
  3. PHP - NetBeans中调试PHP
  4. 《JavaScript 标准参考教程》阮一峰
  5. 从0开始利用宝塔linux面板+WordPress一键部署搭建个人的博客介绍
  6. 八大编程知名编程语言或系统的发展简史
  7. smarty模板概念及应用场合
  8. 兄弟连区块链教程Fabric1.0源代码分析configupdate处理通道配置更新
  9. 如何有效的压缩虚拟磁盘
  10. MyISAM 和 InnoDB 讲解
  11. SSH框架电子商城-系统技术分析
  12. 《从零开始的 RPG 游戏制作教程》第八期:对话、按钮、变量、马甲
  13. 广州大学机器学习与数据挖掘实验一:线性回归
  14. Mac使用U盘重装系统
  15. redo log详解
  16. matlab中psf2otf作用,Matlab中psf2otf()函数在opencv中的实现
  17. 电脑出现不良代码查找
  18. 面试题(十二)自我介绍
  19. 小米总监说软件测试分为这及类
  20. html实现数据的增删查改

热门文章

  1. Python进阶09 filter函数
  2. LastIndexOf属性
  3. sublime如何实现函数折叠
  4. [摘录]第二部分 战略决策(2)
  5. Azure平台管理员必须了解的安全问题
  6. maven多模块eclipse jetty热部署
  7. 制作最小Linux系统并且让其在新的虚拟机上运行
  8. [Node]node.js 文件操作
  9. 走向ASP.NET架构设计-第六章-服务层设计(中篇)
  10. kentico中自定义错误页面