异步作

应用程序访问 Internet 资源所需的时间取决于多种因素,例如正在使用的连接、资源所在的服务器以及尝试访问资源的用户数。 对于下载多个资源或处理多个任务(包括一个或多个下载)的应用程序,在转到下一个任务之前等待每个下载完成可能非常低效。 若要减少应用程序必须等待的时间量,许多 WinINet 函数可以异步运行。

在异步模式下,应用程序可以执行包含上下文值的任何函数作为其参数之一,并且可以在应用程序等待函数完成其任务时继续执行其他命令或函数。 任务正在完成时,应用程序提供的状态回调函数将通知任务进度及其完成时间。 此时,状态回调函数可以调用其他函数或执行依赖于任务完成的任何其他必需任务。

异步调用 WinINet 时没有回调线程:调用可能从一个线程开始,但任何其他线程都可以接收回调。

好处

异步作有几个好处。 例如:

  • 同时下载多个 Internet 资源。

    可以同时连接到多个 Internet 资源,并在它们可用时下载它们。

  • 提高应用程序的性能。

    使用 WinINet 函数的应用程序不必在请求完成之前等待,因此应用程序可以自由执行其他不依赖于请求的任务,从而提高应用程序的整体性能。

  • 监视下载进度。

    状态回调函数在处理请求时接收通知。 如果需要,应用程序可以使用该状态回调函数提供的信息,使用户随时了解作进度或中断需要太长时间才能完成的请求。

场景

假设你的应用程序需要从倒下咖啡 & 茶和第四咖啡网站下载咖啡价格,并比较价格。 第四咖啡站点的响应时间通常较慢,因此应用程序应首先从 Downfall Coffee & Tea 下载信息。

开发应用程序的两个版本。 一个同步工作,首先从下降咖啡 & 茶网站下载价格,然后从第四咖啡网站的价格。 第二个代码以异步方式工作,向两个站点发送请求,并在它们可用时下载价格。

下表说明了如果第四咖啡网站在特定日期更快,会发生什么情况。

事件 同步版本 异步版本
开始 向倒下咖啡 & 茶发送请求 向倒塌咖啡 & 茶和第四咖啡发送请求
从异步版本到 Fourth Coffee 的请求已完成 等待 从第四咖啡下载价格
请求关闭咖啡 & 茶已完成 从倒下咖啡 & 茶下载价格 从倒下咖啡 & 茶下载价格
下降咖啡 & 茶的价格下载 向第四咖啡发送请求 比较价格
异步版本的比较已完成 等待 作完成
从同步版本到第四咖啡的请求已完成 从第四咖啡下载价格 n/a
下载第四杯咖啡的价格后 比较价格 n/a
同步版本的比较已完成 作完成 n/a

 

另一个示例是 Web 浏览器,例如Microsoft Internet Explorer。 浏览器下载页面时,通常需要下载其他资源,例如图像和声音文件。 在异步模式下,页面及其关联的资源可以在可用时同时请求和下载,而不是一次请求和下载页面和每个资源。

以下是相关链接。

教程

设置异步作所需的函数

异步使用的函数

 

注意

WinINet 不支持服务器实现。 此外,不应从服务使用它。 对于服务器实现或服务,请使用 Microsoft Windows HTTP 服务(WinHTTP)