【发布时间】:2010-03-17 13:04:04
【问题描述】:
我在处理尝试通过互联网通过 HttpWebResponse 在我的应用程序中下载的数据时遇到了一个大问题。我的代码如下所示:
myWebRequest.Timeout = 10000;
using (HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse())
{
using (Stream ReceiveStream = myWebResponse.GetResponseStream())
{
Encoding encode = Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader(ReceiveStream, encode);
// Read 1024 characters at a time.
Char[] read = new Char[1024];
int count = readStream.Read(read, 0, 1024);
int break_counter = 0;
while (count > 0 && break_counter < 10000)
{
String str = new String(read, 0, count);
buffer += str;
count = readStream.Read(read, 0, 1024);
break_counter++;
}
}
}
这段代码在几个单独的线程中运行,所以调试起来有点困难。问题是这种方法卡住了,我将其归咎于与数据的连接不佳。
如您所见,我已经设置了超时,并希望代码在超时时间到期后终止。它不是!至少不是一直。有时我会收到 WebException/Timeout,但有几次只是卡住了。
究竟什么是超时?什么时候叫? 假设 HttpWebResponse 开始接收数据,但在传输过程中卡住了。我会超时吗?对我来说,看起来我没有,因为我的应用程序也卡住了,并且没有引发超时异常。
我可以做些什么来修补这个问题,或者我怎样才能获得关于这里出了什么问题的更多信息?
【问题讨论】:
标签: c# timeout httpwebresponse