处理StreamReader.ReadLine()中断 - 服务器不可用

时间:2013-12-02 13:05:20

标签: c# .net tcpclient

我在 WebResponse.GetResponseStream()

获取的流中有 StreamReader

StreamReader.ReadLine()在正常操作中完美运行,但是当服务器在通信中关闭时,而不是像我预期的那样抛出异常,应用程序只挂起 StreamReader.ReadLine()和CPU使用率跃升至100%

StreamReader.ReadLine()正在执行时,处理这种连接丢失情况的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

设置读取超时

int fiveSeconds = 5000;
streamReader.BaseStream.ReadTimeout = fiveSeconds;

答案 1 :(得分:1)

我很害怕你不能像这样使用StreamReader - 它将继续在while循环中调用socket上的Read,而Read只返回0,因为它不等待数据。在任何情况下,您都不应将Web响应视为任何其他流。你没有读过任何东西的事实并不意味着什么都没有 - 你不知道还有多少东西要读。

相反,除非您正在下载大页面,否则请将整个响应读入MemoryStream,并使用StreamReader。它会更快,更稳定。它只是意味着你必须将整个页面缓冲在内存中一段时间​​。