C # - Одновременный HttpWebRequest для получения ответа от сервера

2

В настоящее время я работаю над менеджером загрузки С# (WinForms) в качестве моего проекта, и у меня возникла проблема, и я не уверен, каким будет лучший подход.

Я хочу "заставить" ответ с веб-сервера в оптимальное время. Имея это в виду, я решил, что было бы лучше отправлять запросы с определенным интервалом до тех пор, пока не будет дан ответ на один из запросов. Предполагая, что сервер реагирует, это должно устранить некоторую задержку.

Например, Я хочу получить информацию с веб-сервера. Я не хочу отправлять запрос и ждать его до таймаута, а затем повторно отправить. Вместо этого я бы подождал 2 секунды и отправил другой запрос, а затем другой, пока не будет дан ответ на один из них.

  • Неужели я совершенно не согласен с этим методом повторной отправки? Должен ли я просто отправить один запрос и ждать ответа?

  • Что было бы хорошим решением для этого? Использование нескольких задач с одним и тем же маркером отмены? Асинхронные запросы с сигналом?

Очень понравилась бы ваша помощь.

  • 0
    Привет! Все еще там? =) Просто хочу узнать, решили ли вы свою проблему. Я заметил, что вы новичок в StackOverflow ... когда вы обнаружите, что ответом является решение вашей проблемы, вы можете пометить его как «принятый ответ». Если ни один из них не соответствует тому, что вы хотите, не принимайте ответ только для того, чтобы сделать людей счастливыми ... хорошо!
Теги:
multithreading
http
httpwebrequest

2 ответа

1

Ну, я думаю, что большинство менеджеров загрузки распараллеливают фрагменты загружаемого файла... не совсем стартап загрузки. Я не думаю, что вам следует заботиться о быстрой реакции, на самом деле я думаю, что это не поможет.

Когда вы сделаете запрос, он найдет маршрут к серверу, а затем снова. Как только вы узнаете маршрут, следующий раз будет быстрым... то есть, если вы делаете несколько запросов с использованием большого количества потоков, все они, вероятно, будут отвечены одновременно, потому что маршрут все еще является "обнаружен", и как только он будет обнаружен, все они будут использовать один и тот же путь.

Как вопрос, как это сделать... Я бы сделал это с помощью асинхронных запросов.

Но это только мое мнение... вот и все это только мое мнение... только то, что я считаю правдой.

0

Если вы используете .Net 4.0, вы можете попробовать параллельную обработку. Что-то вроде этого:

Parallel.ForEach(ListOfRequest, req => {
     // Retrive information from a web server.
});

Или вы можете проверить эту ссылку для отмены маркера для работы: Параллельное программирование: аннулирование задачи

Надеюсь на эту помощь, спасибо.

  • 0
    Я читал статьи блога о TPL, это было очень полезно, спасибо за ссылку. Я решил пойти с одним запросом за раз, чтобы получить информацию, а затем поставить задачи для одновременного подключения. Спасибо вам обоим за ваши ответы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню