mak_ufo
@mak_ufo

Почему «блокируется» второй поток при попытке http-request?

Здравствуйте. Есть метод для отправки запросов:
public static XDocument _request(string Url)
{
     WebRequest Request = WebRequest.Create(Url);
     Stream XmlStream = Request.GetResponse().GetResponseStream();
     return XDocument.Load(XmlStream);
}


Пытаюсь запустить два потока:
foreach (string Link in Links)
{
    TimerCallback RSSCallback = new TimerCallback(ReadRSS);
    Timer Timer = new Timer(Test, Link, 0, 3000);
}

public static void Test(object obj)
{ 
    string Url = (string)obj;
    Console.WriteLine($"Запрос на {Url}");
    RSS._request(Url);
}


В итоге вижу следующее:
5a8851eca4c69116617098.png
То есть по какой-то причине запросы начинают обрабатывать только в одном потоке, в другом всё тихо. Опытным путём выяснил, что это никак не зависит от URL. То есть если поменять в массиве Links элементы, то всё равно только первый поток работает.

В чём ошибка?

UPD. Опытным путём было выявлено, что ошибка в строчке return XDocument.Load(XmlStream). Если её убрать, то все запросы нормально отправляются на оба ресурсов без каких-либо проблем
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ответы на вопрос 1
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
Не очень понимаю, зачем все эти Timer и TimerCallback.
Если надо просто запустить несколько запросов параллельно, предлагаю этот код:
TimerCallback RSSCallback = new TimerCallback(ReadRSS);
Timer Timer = new Timer(Test, Link, 0, 3000);


заменить вот этим:
new Task(Test, Link).Start();
Ответ написан
Ваш ответ на вопрос

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

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