Bruk én CancellationToken for .NET HttpClient-headere og -innhold
Send forespørselens CancellationToken gjennom både HttpClients oppsett av svaret og lesingen av innholdet, i stedet for å måle bare den som kaller sin ventetid.
En stoppeklokke kan slutte å vente mens HTTP-forespørselen fortsetter. Gi avbrudd til selve operasjonen når et proxyforsøk har et tiltenkt tidsbudsjett.
For en moderne .NET-applikasjon med en eksisterende proxykonfigurert 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 budsjettet starter før oppsettet og er aktivt mens innholdet leses. ResponseHeadersRead gir kontrollen tilbake etter headerne, så HttpClients egen tidsavbrudd definerer ikke alene budsjettet for den senere innholdslesingen.
Hold avbrudd atskilt fra HTTP-status og transportfeil. En OperationCanceledException kan komme fra den medsendte tokenen eller en annen konfigurert tidsavbrudd; undersøk den aktuelle avbruddskilden i stedet for å rapportere hver feil som en død proxy.
Gjenbruk klienten som eier denne proxyruten. Å avbryte ett forsøk betyr ikke at hele tilkoblingspoolen må bygges på nytt for hver senere forespørsel.
Eksempelet bufrer et endelig svarsinnhold. En strømmende nedlasting bør sende tokenen gjennom strømkopieringsløkken og frigi svaret på hver utgangsvei.
Avbrudd uttrykker en operasjonspolicy, ikke et nøyaktig klokkeløfte for hver underliggende plattformhandling. Unngå å erstatte det med en endeløs pollingsløkke over Task.IsCompleted.