В основном, я хочу получить доступ к большому количеству страниц из того же URl, но я не хочу спамить его в том же secound.And, я его не рассмотрю 30 минут. Не работает ли Thread.Sleep() внутри параллели? Потому что только после 90 минут я сделал это.Параллельный для каждого с Thread.Sleep
var pages = new List<string>(urls);
var sources = new BlockingCollection<string>();
string htmlCode = "";
Random randomN = new Random();
Parallel.ForEach(pages, x =>
{
x = x.Replace("//", "http://");
int sleep = randomN.Next(0, 1800000);
Thread.Sleep(sleep);
HttpWebResponse response = null;
CookieContainer cookie = new CookieContainer();
HttpWebRequest newRequest = (HttpWebRequest)WebRequest.Create(x);
newRequest.Timeout = 15000;
newRequest.Proxy = null;
newRequest.CookieContainer = cookie;
newRequest.UserAgent = "Mozilla/5.0(Windows NT 5.1) AppleWebKit/537.11(KHTML, like Gecko) Chrome/23.0.1300.0 Iron/23.0.1300.0 Safari/537.11";
newRequest.ContentLength = 0;
response = (HttpWebResponse)newRequest.GetResponse();
htmlCode = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(1252)).ReadToEnd();
sources.Add(htmlCode);
});
return sources;
О, и несвязанный совет: никогда не используйте один экземпляр System.Random внутри тела Parallel.ForEach ... он не является потокобезопасным и будет ужасно разорваться (начинает возвращаться только ноль). См. Это [запись в блоге] (http://blogs.msdn.com/b/pfxteam/archive/2009/02/19/9434171.aspx) для обходных решений. –