Udostępnij za pośrednictwem


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.

Poniżej przedstawiono powiązane linki.

Samouczki

Funkcje potrzebne do skonfigurowania operacji asynchronicznej

Funkcje, które mogą być używane asynchronicznie

 

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).