В настоящее время я работаю над менеджером загрузки С# (WinForms) в качестве моего проекта, и у меня возникла проблема, и я не уверен, каким будет лучший подход.
Я хочу "заставить" ответ с веб-сервера в оптимальное время. Имея это в виду, я решил, что было бы лучше отправлять запросы с определенным интервалом до тех пор, пока не будет дан ответ на один из запросов. Предполагая, что сервер реагирует, это должно устранить некоторую задержку.
Например, Я хочу получить информацию с веб-сервера. Я не хочу отправлять запрос и ждать его до таймаута, а затем повторно отправить. Вместо этого я бы подождал 2 секунды и отправил другой запрос, а затем другой, пока не будет дан ответ на один из них.
Неужели я совершенно не согласен с этим методом повторной отправки? Должен ли я просто отправить один запрос и ждать ответа?
Что было бы хорошим решением для этого? Использование нескольких задач с одним и тем же маркером отмены? Асинхронные запросы с сигналом?
Очень понравилась бы ваша помощь.
Ну, я думаю, что большинство менеджеров загрузки распараллеливают фрагменты загружаемого файла... не совсем стартап загрузки. Я не думаю, что вам следует заботиться о быстрой реакции, на самом деле я думаю, что это не поможет.
Когда вы сделаете запрос, он найдет маршрут к серверу, а затем снова. Как только вы узнаете маршрут, следующий раз будет быстрым... то есть, если вы делаете несколько запросов с использованием большого количества потоков, все они, вероятно, будут отвечены одновременно, потому что маршрут все еще является "обнаружен", и как только он будет обнаружен, все они будут использовать один и тот же путь.
Как вопрос, как это сделать... Я бы сделал это с помощью асинхронных запросов.
Но это только мое мнение... вот и все это только мое мнение... только то, что я считаю правдой.
Если вы используете .Net 4.0, вы можете попробовать параллельную обработку. Что-то вроде этого:
Parallel.ForEach(ListOfRequest, req => {
// Retrive information from a web server.
});
Или вы можете проверить эту ссылку для отмены маркера для работы: Параллельное программирование: аннулирование задачи
Надеюсь на эту помощь, спасибо.