我在 WebResponse.GetResponseStream()
获取的流中有 StreamReaderStreamReader.ReadLine()在正常操作中完美运行,但是当服务器在通信中关闭时,而不是像我预期的那样抛出异常,应用程序只挂起 StreamReader.ReadLine()和CPU使用率跃升至100%
StreamReader.ReadLine()正在执行时,处理这种连接丢失情况的正确方法是什么?
答案 0 :(得分:3)
设置读取超时
int fiveSeconds = 5000;
streamReader.BaseStream.ReadTimeout = fiveSeconds;
答案 1 :(得分:1)
我很害怕你不能像这样使用StreamReader - 它将继续在while循环中调用socket上的Read,而Read只返回0,因为它不等待数据。在任何情况下,您都不应将Web响应视为任何其他流。你没有读过任何东西的事实并不意味着什么都没有 - 你不知道还有多少东西要读。
相反,除非您正在下载大页面,否则请将整个响应读入MemoryStream,并使用StreamReader。它会更快,更稳定。它只是意味着你必须将整个页面缓冲在内存中一段时间。