Brug én CancellationToken til .NET HttpClient-headere og -body
Send anmodningens CancellationToken gennem både HttpClient-svaropsætning og læsning af body i stedet for kun at måle kalders ventetid.
Et stopur kan stoppe med at vente, mens HTTP-anmodningen fortsætter. Giv annullering til selve handlingen, når et forsøg via proxy har et tilsigtet budget.
Til en moderne .NET-applikation med en eksisterende proxy-konfigureret HttpClient:
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);
Det samme budget starter før opsætningen og forbliver aktivt, mens body læses. ResponseHeadersRead giver kontrollen tilbage efter headere, så HttpClients egen afslutningstimeout definerer ikke i sig selv det senere budget for body-læsning.
Hold annullering adskilt fra HTTP-status og transportfejl. En OperationCanceledException kan komme fra det leverede token eller fra en anden konfigureret timeout; undersøg den relevante annulleringskilde i stedet for at rapportere hver fejl som en død proxy.
Genbrug den klient, der ejer denne proxy-rute. Annullering af et forsøg behøver ikke betyde genopbygning af en hel forbindelsespulje til hver senere anmodning.
Eksemplet buffer en endelig svarbody. En streaming-download bør sende token gennem sin stream-kopiløkke og frigive svaret på hver udgangsvej.
Annullering udtrykker en handlingspolitik, ikke et præcist løfte om vægur-tid for hver underliggende platformshandling. Undgå at erstatte det med en endeløs polling-løkke over Task.IsCompleted.