Otkazivanje .NET HttpClient zahteva kroz proxy pomoću tokena roka
Otkažite samu mrežnu operaciju kada rok proxyja istekne, umesto da ograničite samo čekanje pozivaoca.
Prosledite rok operaciji koja može da otkaže mrežni rad. Za postojeći .NET HttpClient konfigurisan kroz proxy:
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);Aplikacija obezbeđuje client i uri. Ovo preopterećenje prima token za otkazivanje; vremensko ograničenje oko čekanja njegovog zadatka ograničilo bi samo čekanje tog pozivaoca. Ispitivanje zastavice završetka ima isti problem: pozivalac može da ode dok su utičnice i radnici još zauzeti.
Otkazivanje prati implementaciju klijenta i putanju čišćenja. Ono ne obećava da će se svaka radnja nižeg nivoa zaustaviti na tačnoj instrukciji. Dozvolite toj putanji da se završi i oslobodite resurse koje operacija poseduje. Uključite u dizajn odvojeno kontrolisano čitanje tela; za modernu .NET ResponseHeadersRead operaciju, prosledite isti token kroz čitanje tela. Drugi klijenti pružaju sopstvene interfejse za otkazivanje, prekid i čišćenje.
Ponovni pokušaj zahteva ishod za prethodni pokušaj. Sačuvajte njegov identifikator i izabrani proxy, zatražite otkazivanje kada je potrebno i izbegnite gubitak zadatka dok beskonačno pokrećete zamene. Inače spor endpoint može da nagomila posao brže nego što ga aplikacija oslobađa.
Udaljeni ishod zahteva odvojeno rukovanje. Odredište je možda već primilo slanje kada dođe do otkazivanja. Koristite politiku oporavka ili idempotentnosti aplikacije; zaustavljanje lokalnog rada ne poništava udaljenu radnju.