Асинхронная операция
Время, которое требуется приложению для доступа к интернет-ресурсу, зависит от ряда факторов, таких как используемое подключение, сервер, на котором находится ресурс, и количество пользователей, пытающихся получить доступ к ресурсу. Для приложений, которые загружают несколько ресурсов или обрабатывают несколько задач (включая одну или несколько скачивание), ожидая завершения каждой загрузки, прежде чем перейти к следующей задаче, может оказаться чрезвычайно неэффективной. Чтобы уменьшить время ожидания приложения, многие функции WinINet могут работать асинхронно.
В асинхронном режиме приложение может выполнять любую функцию, содержащую значение контекста в качестве одного из его параметров, и продолжать выполнять другие команды или функции, пока приложение ожидает завершения задачи функции. Пока задача завершена, функция обратного вызова состояния, предоставляемая приложением, уведомляется о ходе выполнения задачи и о завершении. В настоящее время функция обратного вызова состояния может вызывать другие функции или выполнять другие необходимые задачи, которые зависят от завершения задачи.
При асинхронном вызове WinINet отсутствует определение потока обратного вызова: вызов может начинаться с одного потока, но любой другой поток может получать обратный вызов.
Льготы
Существует несколько преимуществ для асинхронной работы. Например:
Скачивание нескольких интернет-ресурсов одновременно.
Вы можете подключиться к нескольким интернет-ресурсам одновременно и скачать их по мере их доступности.
Повышение производительности приложения.
Приложению, использующим функции WinINet, асинхронно не нужно ждать завершения запроса, поэтому приложение может выполнять другие задачи, которые не зависят от запроса, таким образом повышая общую производительность приложения.
Отслеживайте ход загрузки.
Функция обратного вызова состояния получает уведомления во время обработки запроса. При необходимости приложение может использовать сведения, предоставленные этой функцией обратного вызова состояния, чтобы оставить пользователя в курсе хода выполнения операции или прерывания запросов, которые требуют слишком долгого завершения.
Сценарии
Предположим, что ваше приложение должно скачать цены на кофе из Downfall Coffee и Чай и четвертые сайты кофе и сравнить цены. Четвертый сайт кофе обычно имеет более медленное время отклика, поэтому ваше приложение должно скачать информацию из Downfall Coffee и Чай в первую очередь.
Разрабатываются две версии приложения. Один работает синхронно, сначала скачивая цены с сайта Downfall Coffee и чая, а затем цены с четвертого сайта кофе. Второй работает асинхронно, отправляя запросы на оба сайта и скачивая цены, когда они становятся доступными.
В следующей таблице показано, что произойдет, если четвертый сайт кофе был быстрее в определенный день.
Мероприятие | Синхронная версия | Асинхронная версия |
---|---|---|
Начать с | Отправка запроса в Downfall Coffee и Чай | Отправка запросов в Downfall Coffee и Четвертый кофе |
Запрос от асинхронной версии к четвертому кофе завершен | Ожидание | Скачивание цен на четвертый кофе |
Запрос на понижение кофе и чай завершен | Скачать цены от Downfall Coffee и чай | Скачать цены от Downfall Coffee и чай |
После падения цен на кофе и чай скачиваются | Отправка запроса в четвертый кофе | Сравнение цен |
Сравнение асинхронной версии завершено | Ожидание | Операция завершена |
Запрос от синхронной версии к четвертому кофе завершен | Скачивание цен на четвертый кофе | Н/Д |
После скачивания цен на четвертый кофе | Сравнение цен | Н/Д |
Завершено сравнение синхронной версии | Операция завершена | Н/Д |
Другим примером будет веб-браузер, например Microsoft Internet Обозреватель. Когда браузер скачивает страницу, часто требуется скачать другие ресурсы, такие как изображения и звуковые файлы. В асинхронном режиме страницу и связанные с ней ресурсы можно запрашивать одновременно и загружать по мере их доступности, а не запрашивать и загружать страницу и каждый ресурс одновременно.
См. также
Ниже приведены ссылки.
Учебники
Функции, необходимые для настройки асинхронной операции
Функции, которые можно использовать асинхронно
- FtpCreateDirectory
- FtpDeleteFile
- FtpFindFirstFile
- FtpGetCurrentDirectory
- FtpGetFile
- FtpOpenFile
- FtpPutFile
- FtpRemoveDirectory
- FtpRenameFile
- FtpSetCurrentDirectory
- GopherFindFirstFile
- GopherOpenFile
- HttpEndRequest
- HttpOpenRequest
- HttpSendRequestEx
- Интернет Подключение
- InternetOpenUrl
- InternetReadFileEx
Примечание.
Функции FtpCreateDirectory, FtpRemoveDirectory, FtpSetCurrentDirectory, FtpGetCurrentDirectory, FtpDeleteFile и FtpRenameFile используют значение контекста, предоставленное в вызове функции Internet Подключение.
Примечание.
WinINet не поддерживает реализации сервера. Кроме того, его не следует использовать из службы. Для реализации или служб сервера используются службы HTTP Microsoft Windows (WinHTTP).