Operacja asynchroniczna
Czas potrzebny aplikacji na uzyskanie dostępu do zasobu internetowego zależy od wielu czynników, takich jak używane połączenie, serwer, na którym znajduje się zasób, oraz liczba użytkowników próbujących uzyskać dostęp do zasobu. W przypadku aplikacji, które pobierają wiele zasobów lub obsługują wiele zadań (w tym co najmniej jeden plik do pobrania), oczekiwanie na ukończenie każdego pobierania przed przejściem do następnego zadania może być niezwykle nieefektywne. Aby skrócić czas oczekiwania aplikacji, wiele funkcji WinINet może działać asynchronicznie.
W trybie asynchronicznym aplikacja może wykonać dowolną funkcję, która zawiera wartość kontekstu jako jeden z jego parametrów i może nadal wykonywać inne polecenia lub funkcje, gdy aplikacja czeka na ukończenie zadania funkcji. Podczas wykonywania zadania funkcja wywołania zwrotnego stanu zapewniana przez aplikację jest powiadamiana o postępie zadania i zakończeniu. W tej chwili funkcja wywołania zwrotnego stanu może wywoływać inne funkcje lub wykonywać inne wymagane zadania, które były zależne od ukończenia zadania.
Podczas wywoływania asynchronicznego wywołania wątku zwrotnego nie ma żadnego połączenia zwrotnego: wywołanie może zaczynać się od jednego wątku, ale każdy inny wątek może odbierać wywołanie zwrotne.
Korzyści
Istnieje kilka korzyści związanych z działaniem asynchronicznym. Na przykład:
Jednoczesne pobieranie wielu zasobów internetowych.
Możesz jednocześnie nawiązać połączenie z wieloma zasobami internetowymi i pobrać je, gdy staną się dostępne.
Zwiększenie wydajności aplikacji.
Aplikacja korzystająca z funkcji WinINet asynchronicznie nie musi czekać na ukończenie żądania, więc aplikacja może wykonywać inne zadania, które nie są zależne od żądania, co zwiększa ogólną wydajność aplikacji.
Monitoruj postęp pobierania.
Funkcja wywołania zwrotnego stanu odbiera powiadomienia podczas przetwarzania żądania. W razie potrzeby aplikacja może korzystać z informacji dostarczonych przez funkcję wywołania zwrotnego stanu, aby informować użytkownika o postępie operacji lub przerywać żądania, które trwają zbyt długo.
Scenariuszy
Załóżmy, że aplikacja musi pobrać ceny kawy z witryny Downfall Coffee & Tea i Fourth Coffee oraz porównać ceny. Czwarta witryna do kawy zwykle ma wolniejszy czas odpowiedzi, więc aplikacja powinna pobrać informacje z Downfall Coffee & Tea first.
Opracowywane są dwie wersje aplikacji. Jeden działa synchronicznie, najpierw pobierając ceny z witryny Downfall Coffee & Tea, a następnie ceny z czwartej witryny kawy. Drugi działa asynchronicznie, wysyłając żądania do obu witryn i pobierając ceny, gdy staną się dostępne.
W poniższej tabeli przedstawiono, co by się stało, gdyby czwarta kawiarnia była szybsza w danym dniu.
Zdarzenie | Wersja synchroniczna | Wersja asynchroniczna |
---|---|---|
Początek | Wyślij żądanie do downfall Coffee & herbaty | Wysyłanie żądań do downfall Coffee & herbaty i czwartej kawy |
Żądanie z wersji asynchronicznej do czwartej kawy zostało ukończone | Czekanie | Pobierz ceny z Czwartej Kawy |
Prośba o upadek kawy & herbata ukończona | Pobierz ceny z Downfall Coffee & Tea | Pobierz ceny z Downfall Coffee & Tea |
Po downfall Coffee & ceny herbaty są pobierane | Wyślij żądanie do czwartej kawy | Porównanie cen |
Ukończono porównanie wersji asynchronicznej | Czekanie | Ukończono operację |
Żądanie z wersji synchronicznej do czwartej kawy zostało ukończone | Pobierz ceny z Czwartej Kawy | N/a |
Po pobraniu cen czwartej kawy | Porównanie cen | N/a |
Ukończono porównanie wersji synchronicznej | Ukończono operację | N/a |
Innym przykładem może być przeglądarka internetowa, taka jak Microsoft Internet Explorer. Gdy przeglądarka pobiera stronę, często musi pobrać inne zasoby, takie jak obrazy i pliki dźwiękowe. W trybie asynchronicznym strona i skojarzone z nią zasoby mogą być pobierane jednocześnie i pobierane, gdy staną się dostępne, zamiast żądać i pobierać stronę i każdy zasób pojedynczo.
Tematy pokrewne
Poniżej przedstawiono powiązane linki.
Samouczki
Funkcje potrzebne do skonfigurowania operacji asynchronicznej
Funkcje, które mogą być używane asynchronicznie
- FtpCreateDirectory
- ftpDeleteFile
- FtpFindFirstFile
- FtpGetCurrentDirectory
- FtpGetFile
- FtpOpenFile
- ftpPutFile
- ftpRemoveDirectory
- FtpRenameFile
- FtpSetCurrentDirectory
- gopherFindFirstFile
- GopherOpenFile
- HttpEndRequest
- HttpOpenRequest
- HttpSendRequestEx
- InternetConnect
- InternetOpenUrl
- InternetReadFileEx
Nuta
FtpCreateDirectory, FtpRemoveDirectory, FtpSetCurrentDirectory, FtpGetCurrentDirectory, FtpDeleteFilei FtpRenameFile używają wartości kontekstu podanej w wywołaniu funkcji InternetConnect.
Nuta
Usługa WinINet nie obsługuje implementacji serwera. Ponadto nie należy jej używać z usługi. W przypadku implementacji serwera lub usług należy użyć usług HTTP systemu Microsoft Windows (WinHTTP).