異步操作
應用程式存取因特網資源所花費的時間量取決於許多因素,例如所使用的連線、資源所在的伺服器,以及嘗試存取資源的用戶數目。 對於下載多個資源或處理多個工作的應用程式(包括一或多個下載),等待每個下載完成,再繼續進行下一個工作可能會非常沒有效率。 若要減少應用程式必須等候的時間量,許多 WinINet 函式可以異步操作。
在異步模式中,應用程式可以執行包含內容值做為其其中一個參數的任何函式,而且可以在應用程式等候函式完成其工作時繼續執行其他命令或函式。 當工作完成時,應用程式所提供的狀態回呼函式會收到工作進度和完成時間的通知。 目前,狀態回呼函式可以呼叫其他函式,或執行任何其他相依於工作完成的必要工作。
當您以異步方式呼叫 WinINet 時,沒有任何回呼線程:呼叫可能會從一個線程開始,但任何其他線程都可以接收回呼。
福利
異步操作有幾個優點。 例如:
同時下載多個因特網資源。
您可以同時連線到多個因特網資源,並在它們可供使用時下載它們。
提高應用程式的效能。
使用 WinINet 函式的應用程式不需要等到要求完成,因此應用程式可以自由執行其他不相依於要求的工作,進而改善應用程式的整體效能。
監視下載的進度。
狀態回呼函式會在處理要求時接收通知。 如有需要,您的應用程式可以使用該狀態回呼函式提供的資訊,讓使用者知道作業的進度,或中斷需要太久才能完成的要求。
案例
假設您的應用程式需要從 Downfall Coffee & Tea 和 Fourth Coffee 網站下載咖啡價格,並比較價格。 第四咖啡網站通常會有較慢的響應時間,因此您的應用程式應該先從倒下咖啡和茶下載資訊。
開發兩個版本的應用程式。 一個同步運作,首先從倒降咖啡和茶網站下載價格,然後從第四咖啡網站的價格。 第二個會以異步方式運作,將要求傳送至這兩個網站,並在其可供使用時下載價格。
下表說明如果第四咖啡網站在特定一天更快,會發生什麼情況。
Event | 同步版本 | 異步版本 |
---|---|---|
Start | 傳送要求給倒塌咖啡和茶 | 將要求傳送至倒下咖啡和茶和第四咖啡 |
已完成從異步版本到Fourth Coffee的要求 | 等待 | 從第四杯咖啡下載價格 |
要求關閉咖啡和茶已完成 | 從下跌咖啡和茶下載價格 | 從下跌咖啡和茶下載價格 |
下載下跌咖啡和茶的價格后 | 將要求傳送至 Fourth Coffee | 比較價格 |
異步版本的比較已完成 | 等待 | 作業完成 |
從同步版本到 Fourth Coffee 的要求已完成 | 從第四杯咖啡下載價格 | n/a |
下載第四杯咖啡的價格之後 | 比較價格 | n/a |
同步版本的比較已完成 | 作業完成 | n/a |
另一個範例是網頁瀏覽器,例如 Microsoft Internet Explorer。 當瀏覽器下載頁面時,通常需要下載其他資源,例如影像和聲音檔案。 在異步模式中,頁面及其相關聯的資源可以同時要求並下載,因為它們可供使用,而不是一次要求和下載頁面和每個資源。
[相關主題]
以下是相關連結。
教學課程
設定異步操作所需的函式
可異步使用的函式
- FtpCreateDirectory
- FtpDeleteFile
- FtpFindFirstFile
- FtpGetCurrentDirectory
- FtpGetFile
- FtpOpenFile
- FtpPutFile
- FtpRemoveDirectory
- FtpRenameFile
- FtpSetCurrentDirectory
- GopherFindFirstFile
- GopherOpenFile
- HttpEndRequest
- HttpOpenRequest
- HttpSendRequestEx
- 因特網 連線
- InternetOpenUrl
- InternetReadFileEx
注意
FtpCreateDirectory、FtpRemoveDirectory、FtpSetCurrentDirectory、FtpGetCurrentDirectory、FtpDeleteFile 和 FtpRenameFile 函式會使用因特網 連線 函式呼叫中提供的內容值。
注意
WinINet 不支援伺服器實作。 此外,不應該從服務使用。 針對伺服器實作或服務,請使用 Microsoft Windows HTTP 服務 (WinHTTP) 。