C # - Одновременный HttpWebRequest для получения ответа от сервера - PullRequest
2 голосов
/ 20 апреля 2011

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

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

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

  1. Я совершенно не прав с этим подходом повторной отправки? Должен ли я просто отправить один запрос и ждать ответа?

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

Буду очень признателен за вашу помощь.

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

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

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

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

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

0 голосов
/ 20 апреля 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...