Koristite jedan CancellationToken za zaglavlja i tijelo .NET HttpClient
Prenesite CancellationToken zahtjeva kroz postavljanje HttpClient odgovora i čitanje tijela, umjesto da mjerite samo čekanje pozivatelja.
Štoperica može prestati čekati dok se HTTP zahtjev nastavlja. Osigurajte otkazivanje samoj operaciji kada pokušaj preko proxyja ima predviđeni proračun.
Za modernu .NET aplikaciju s postojećim HttpClient konfiguriranim za proxy:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(5));
using var response = await client.GetAsync(
targetUrl,
HttpCompletionOption.ResponseHeadersRead,
budget.Token);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync(budget.Token);
Isti proračun počinje prije postavljanja i ostaje aktivan dok se tijelo čita. ResponseHeadersRead vraća kontrolu nakon zaglavlja, pa HttpClientov vlastiti timeout završetka sam po sebi ne određuje kasniji proračun čitanja tijela.
Držite otkazivanje odvojeno od HTTP statusa i transportnih pogrešaka. OperationCanceledException može doći od dostavljenog tokena ili drugog konfiguriranog timeouta; provjerite primjenjivi izvor otkazivanja umjesto da svaki neuspjeh prijavljujete kao mrtav proxy.
Ponovno upotrijebite klijenta koji posjeduje ovu proxy rutu. Otkazivanje pokušaja ne mora značiti ponovnu izgradnju cijelog skupa veza za svaki kasniji zahtjev.
Primjer puferira konačno tijelo odgovora. Streaming preuzimanje treba proslijediti token kroz svoju petlju kopiranja toka i osloboditi odgovor na svakom izlaznom putu.
Otkazivanje izražava politiku operacije, a ne točno obećanje stvarnog vremena za svaku radnju platforme. Izbjegavajte da ga zamijenite beskonačnom petljom provjeravanja Task.IsCompleted.