@patsanchique

Как задать таймаут для DownloadString?

У меня есть параллельный foreach цикл, который скачивает исходник сайта из списка ссылок, а затем парсит полученное.
Список самих ссылок довольно большой, и все они с одного сайта, потому сайт довольно быстро начинает отдавать 429 ошибку вместо своего содержимого
Потому я решил использовать случайную прокси для каждого скачивания, но это не особо помогло и программа начала просто намертво вставать. Как можно задать таймаут для DownloadString, чтобы я мог по нему завершить текущую итерацию, в случае если сайт не отдаёт содержимое?
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
exorka
@exorka
Программист, админ, радиолюбитель
Если вы используете класс 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;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы