У меня есть программа, которая получает код для ~ 500 веб-страниц через каждые 5 минутПолучение HTML ответ не может, соответственно, после первого терпеть неудачу
он нормально работает до тех пор, первый не обязательно (не удается загрузить источник в 6 секунд)
после что все потоки будут терпеть неудачу
и если перезапустить программу, снова он правильно работает до ...
, где я не прав, что я должен сделать, чтобы сделать это лучше?
эта функция работает через каждые 5 минут:
foreach (Company company in companies)
{
string link = company.GetLink();
Thread t = new Thread(() => F(company, link));
t.Start();
if (!t.Join(TimeSpan.FromSeconds(6)))
{
Debug.WriteLine(company.Name + " Fails");
t.Abort();
}
}
и эта функция загрузки HTML код
private void F(Company company, string link)
{
try
{
string htmlCode = GetInformationFromWeb.GetHtmlRequest(link);
company.HtmlCode = htmlCode;
}
catch (Exception ex)
{
}
}
и этот класс:
public class GetInformationFromWeb
{
public static string GetHtmlRequest(string url)
{
using (MyWebClient client = new MyWebClient())
{
client.Encoding = Encoding.UTF8;
string htmlCode = client.DownloadString(url);
return htmlCode;
}
}
}
и веб-клиент класса
public class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest;
request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
return request;
}
}
Какое исключение возвращено? – Legends
@Legends существует много «исключения прерывания потока» на выходе – mojtaba357
, вы можете использовать 'Continue' в вашем блоке catch, обратитесь по этой ссылке: http://stackoverflow.com/questions/654113/how-do-i-skip-an -iteration-оф-а-Еогеасп-петля –