У меня есть параллельный foreach цикл, который скачивает исходник сайта из списка ссылок, а затем парсит полученное.
Список самих ссылок довольно большой, и все они с одного сайта, потому сайт довольно быстро начинает отдавать 429 ошибку вместо своего содержимого
Потому я решил использовать случайную прокси для каждого скачивания, но это не особо помогло и программа начала просто намертво вставать. Как можно задать таймаут для DownloadString, чтобы я мог по нему завершить текущую итерацию, в случае если сайт не отдаёт содержимое?
Если вы используете класс System.Net.WebClient, то значение тайм аута является приватной переменной класса.
Чтобы его задать вам нужно унаследоваться от этого класса и переопределить метод GetWebRequest.
public class WebClientWithTimeout : WebClient
{
//10 секунд по умолчанию
public int Timeout { get; set; } = 10000;
protected override WebRequest GetWebRequest(Uri uri)
{
var w = base.GetWebRequest(uri);
w.Timeout = Timeout;
return w;
}
}