Поделиться через


Асинхронная операция

Время, которое требуется приложению для доступа к интернет-ресурсу, зависит от ряда факторов, таких как используемое подключение, сервер, на котором находится ресурс, и количество пользователей, пытающихся получить доступ к ресурсу. Для приложений, которые загружают несколько ресурсов или обрабатывают несколько задач (включая одну или несколько скачивание), ожидая завершения каждой загрузки, прежде чем перейти к следующей задаче, может оказаться чрезвычайно неэффективной. Чтобы уменьшить время ожидания приложения, многие функции WinINet могут работать асинхронно.

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

При асинхронном вызове WinINet отсутствует определение потока обратного вызова: вызов может начинаться с одного потока, но любой другой поток может получать обратный вызов.

Льготы

Существует несколько преимуществ для асинхронной работы. Например:

  • Скачивание нескольких интернет-ресурсов одновременно.

    Вы можете подключиться к нескольким интернет-ресурсам одновременно и скачать их по мере их доступности.

  • Повышение производительности приложения.

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

  • Отслеживайте ход загрузки.

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

Сценарии

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

Разрабатываются две версии приложения. Один работает синхронно, сначала скачивая цены с сайта Downfall Coffee и чая, а затем цены с четвертого сайта кофе. Второй работает асинхронно, отправляя запросы на оба сайта и скачивая цены, когда они становятся доступными.

В следующей таблице показано, что произойдет, если четвертый сайт кофе был быстрее в определенный день.

Мероприятие Синхронная версия Асинхронная версия
Начать с Отправка запроса в Downfall Coffee и Чай Отправка запросов в Downfall Coffee и Четвертый кофе
Запрос от асинхронной версии к четвертому кофе завершен Ожидание Скачивание цен на четвертый кофе
Запрос на понижение кофе и чай завершен Скачать цены от Downfall Coffee и чай Скачать цены от Downfall Coffee и чай
После падения цен на кофе и чай скачиваются Отправка запроса в четвертый кофе Сравнение цен
Сравнение асинхронной версии завершено Ожидание Операция завершена
Запрос от синхронной версии к четвертому кофе завершен Скачивание цен на четвертый кофе Н/Д
После скачивания цен на четвертый кофе Сравнение цен Н/Д
Завершено сравнение синхронной версии Операция завершена Н/Д

 

Другим примером будет веб-браузер, например Microsoft Internet Обозреватель. Когда браузер скачивает страницу, часто требуется скачать другие ресурсы, такие как изображения и звуковые файлы. В асинхронном режиме страницу и связанные с ней ресурсы можно запрашивать одновременно и загружать по мере их доступности, а не запрашивать и загружать страницу и каждый ресурс одновременно.

Ниже приведены ссылки.

Учебники

Функции, необходимые для настройки асинхронной операции

Функции, которые можно использовать асинхронно

Примечание.

Функции FtpCreateDirectory, FtpRemoveDirectory, FtpSetCurrentDirectory, FtpGetCurrentDirectory, FtpDeleteFile и FtpRenameFile используют значение контекста, предоставленное в вызове функции Internet Подключение.

 

Примечание.

WinINet не поддерживает реализации сервера. Кроме того, его не следует использовать из службы. Для реализации или служб сервера используются службы HTTP Microsoft Windows (WinHTTP).