Otkažite .NET HttpClient zahtjev kroz proxy pomoću tokena roka
Otkažite samu mrežnu operaciju kada rok proxyja istekne, umjesto da ograničite samo čekanje pozivatelja.
Proslijedite rok operaciji koja može otkazati mrežni rad. Za postojeći .NET HttpClient konfiguriran kroz proxy:
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);Aplikacija daje client i uri. Ovo preopterećenje prima token za otkazivanje; vremensko ograničenje oko čekanja njegova zadatka ograničilo bi samo čekanje tog pozivatelja. Ispitivanje zastavice završetka ima isti problem: pozivatelj može otići dok su utičnice i radnici još zauzeti.
Otkazivanje slijedi implementaciju klijenta i putanju čišćenja. Ono ne obećava da će se svaka radnja niže razine zaustaviti na točnoj instrukciji. Dopustite toj putanji da završi i oslobodite resurse koje operacija posjeduje. Uključite u dizajn odvojeno kontrolirano čitanje tijela; za modernu .NET ResponseHeadersRead operaciju, proslijedite isti token kroz čitanje tijela. Drugi klijenti pružaju vlastita sučelja za otkazivanje, prekid i čišćenje.
Ponovni pokušaj treba ishod za prethodni pokušaj. Sačuvajte njegov identifikator i odabrani proxy, zatražite otkazivanje kada je potrebno i izbjegnite gubitak zadatka dok beskonačno pokrećete zamjene. Inače spor endpoint može nakupljati posao brže nego što ga aplikacija oslobađa.
Udaljeni ishod zahtijeva 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.