Jak mogę asynchronicznie używać HttpWebRequest (.NET, C #)?
c#
.net
asynchronous
httprequest
Jason
źródło
źródło
Odpowiedzi:
Posługiwać się
HttpWebRequest.BeginGetResponse()
Funkcja wywołania zwrotnego jest wywoływana po zakończeniu operacji asynchronicznej. Musisz przynajmniej zadzwonić
EndGetResponse()
z tej funkcji.źródło
webRequest.Proxy = null
aby znacznie przyspieszyć żądanie.Biorąc pod uwagę odpowiedź:
Możesz wysłać wskaźnik żądania lub dowolny inny obiekt, taki jak ten:
Pozdrowienia
źródło
Do tej pory wszyscy się mylili, ponieważ
BeginGetResponse()
trochę popracuje nad bieżącym wątkiem. Z dokumentacji :Aby to zrobić dobrze:
Następnie możesz zrobić z odpowiedzią, co musisz. Na przykład:
źródło
Zdecydowanie najłatwiejszym sposobem jest użycie TaskFactory.FromAsync z TPL . To dosłownie kilka wierszy kodu w połączeniu z nowymi słowami kluczowymi async / await :
Jeśli nie możesz użyć kompilatora C # 5, powyższe można wykonać za pomocą metody Task.ContinueWith :
źródło
Skończyło się na korzystaniu z BackgroundWorker, jest on zdecydowanie asynchroniczny, w przeciwieństwie do niektórych z powyższych rozwiązań, obsługuje powrót do wątku GUI za Ciebie i jest bardzo łatwy do zrozumienia.
Obsługa wyjątków jest również bardzo łatwa, ponieważ kończą się one w metodzie RunWorkerCompleted, ale przeczytaj to: Nieobsłużone wyjątki w BackgroundWorker
Użyłem WebClient, ale oczywiście możesz użyć HttpWebRequest.GetResponse, jeśli chcesz.
źródło
źródło
.NET zmienił się od czasu opublikowania wielu z tych odpowiedzi i chciałbym podać bardziej aktualną odpowiedź. Użyj metody asynchronicznej, aby rozpocząć
Task
działanie w wątku w tle:Aby użyć metody asynchronicznej:
Aktualizacja:
To rozwiązanie nie działa w przypadku aplikacji platformy UWP, które używają
WebRequest.GetResponseAsync()
zamiastWebRequest.GetResponse()
i nie wywołujeDispose()
metod w odpowiednich przypadkach. @dragansr ma dobre alternatywne rozwiązanie, które rozwiązuje te problemy.źródło
WebRequest.GetResponseAsync()
iStreamReader.ReadToEndAync()
muszą być stosowane i oczekiwany.źródło