Mam httpclient takiego:Dlaczego wywołanie funkcji HttpClient.PostAsync jest bardzo powolne w mojej aplikacji C# winforms?
var client = new HttpClient();
mogę napisać do niego tak:
var result = client.PostAsync(
endpointUri,
requestContent);
i uzyskać odpowiedź tak:
HttpResponseMessage response = result.Result;
rozumiem to wywołanie będzie blokować wątek, tak to powinno działać (po prostu zbudowanie dla siebie narzędzia, brak potrzebnych wątków asynchronicznych)
Po pierwszym uruchomieniu tej rozmowy uzyskanie wyniku zajmuje około 2 minut. Tymczasem, jeśli wykonam dokładnie to samo połączenie w innym miejscu, zrobię to w ciągu 200ms. Nawet jeśli trafię w google, zajmuje to 2 minuty. Ale po pierwszym telefonie, dopóki utrzymuję aplikację otwartą, wszystkie dodatkowe połączenia są dobre. Jest to po prostu pierwszy cal po otwarciu aplikacji. Co może być przyczyną tego?
chciałbym zacząć za pomocą '.ContinueWith' zamiast' .Result' (obsługi 'asynchroniczny/await' ...) - oprócz tego, że nic nie widzę Mogłem spowodować takie opóźnienie i szczerze mówiąc podejrzewam, że problem leży gdzieś indziej. – Carsten
Byłoby to łatwe, gdybyśmy mieli stos do obejrzenia. Użyj nowego WebClient(). DownloadString() dla celów testowych, wstrzymaj debuger podczas pauzy i opublikuj stos wywołań zawierający kod zewnętrzny. Prawdopodobnie mówi coś o DNS lub proxy. – usr
Nie mogę zacząć zgadywać, ale zacznę od wykluczenia możliwości synchronicznego wykonywania tego problemu. HttpClient został zaprojektowany tak, aby był tylko asynchroniczny i istnieją silne ostrzeżenia o używaniu go w sposób blokujący. 'czekaj na wynik' jest tak samo proste jak' result.Result', więc po co mu się oprzeć używając poprawnie? –