Përdorni një CancellationToken për titujt dhe trupin e .NET HttpClient
Kaloni CancellationToken e kërkesës si në përgatitjen e përgjigjes së HttpClient ashtu edhe në leximin e trupit, në vend që të matni vetëm pritjen e thirrësit.
Një kronometër mund të ndalojë pritjen ndërsa kërkesa HTTP vazhdon. Jepini anulimin vetë operacionit kur një tentativë përmes proxy ka një buxhet të caktuar kohe.
Për një aplikacion modern .NET me një HttpClient të konfiguruar për proxy që ekziston tashmë:
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);
I njëjti buxhet fillon para përgatitjes dhe mbetet aktiv gjatë leximit të trupit. ResponseHeadersRead kthen kontrollin pas titujve, prandaj afati i vetë HttpClient nuk e përcakton vetë buxhetin e leximit të mëvonshëm të trupit.
Mbajeni anulimin të ndarë nga statusi HTTP dhe gabimet e transportit. Një OperationCanceledException mund të vijë nga tokeni i dhënë ose nga një afat tjetër i konfiguruar; kontrolloni burimin përkatës të anulimit në vend që çdo dështim ta raportoni si proxy të vdekur.
Ripërdorni klientin që zotëron këtë rrugë proxy. Anulimi i një tentativë nuk do të thotë rindërtim i të gjithë grupit të lidhjeve për çdo kërkesë të mëvonshme.
Shembulli ruan në bufer një trup përgjigjeje me madhësi të fundme. Shkarkimi në transmetim duhet ta kalojë tokenin nëpër ciklin e kopjimit të transmetimit dhe ta lëshojë përgjigjen në çdo rrugë daljeje.
Anulimi shpreh një politikë operacioni, jo një premtim të saktë ore për çdo veprim të platformës. Mos e zëvendësoni me një cikël të pafund anketimi mbi Task.IsCompleted.