异步操作

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

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

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

优点

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

  • 同时下载多个 Internet 资源。

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

  • 提高应用程序的性能。

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

  • 监视下载进度。

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

方案

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

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

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

事件 同步版本 异步版本
开始 向 Downfall Coffee & Tea 发送请求 向 Downfall Coffee Tea 和 Fourth Coffee & 发送请求
从异步版本到 Fourth Coffee 的请求已完成 等待 从 Fourth Coffee 下载价格
请求下降咖啡 & 茶已完成 从 Downfall Coffee & Tea 下载价格 从 Downfall Coffee & Tea 下载价格
下降咖啡 & 茶的价格下载后 向 Fourth Coffee 发送请求 比较价格
异步版本的比较已完成 等待 操作完成
从同步版本到 Fourth Coffee 的请求已完成 从 Fourth Coffee 下载价格 不适用
下载第四杯咖啡的价格后 比较价格 不适用
同步版本的比较已完成 操作完成 不适用

 

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

下面是相关链接。

教程

设置异步操作所需的函数

可异步使用的函数

 

注意

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