【发布时间】:2012-10-29 04:18:15
【问题描述】:
我遇到了一个问题,我正在寻找处理它的最佳方法。我在 Parallel.ForEach 循环中使用 HttpWebRequest(代码如下)。我已经在两打机器和许多不同类型的连接上测试了该程序,并且到目前为止它运行良好。
今天,我的 ADSL 调制解调器死了,被 ISP 替换为一个新的 - 现在,当我运行程序时,一旦产生的线程达到 35-40,我得到的只是超时;那时,即使我尝试在浏览器中加载网站,它们也会超时。
我的猜测是调制解调器无法处理并发连接 - 问题是如何防止这种情况发生?当然,我可以限制并发连接的数量,但是应该有更好的方法来处理这个问题吗?
非常感谢任何帮助。
string pageContent;
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(webSiteUrl);
myReq.UserAgent = "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)";
myReq.Method = "GET";
myReq.Accept = "text/html";
myReq.Timeout = webRequestTimeout; //set to generous 90 seconds
myReq.ReadWriteTimeout = webRequestTimeout; //set to 90 seconds
HttpWebResponse myres = (HttpWebResponse)myReq.GetResponse();
using (StreamReader sr = new StreamReader(myres.GetResponseStream(), Encoding.Default))
{
pageContent = sr.ReadToEnd();
}
myres.Close();
【问题讨论】:
-
不,限制并发连接数可能是要走的路。使用
Semaphore很简单。
标签: .net httpwebrequest timeout parallel.foreach