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


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

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

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

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

Преимущества

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

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

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

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

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

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

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

Сценарии

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

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

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

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

 

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

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

Учебники

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

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

Заметка

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

 

Заметка

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