Bruk éin CancellationToken for .NET HttpClient-hovud og -innhald
Send CancellationToken for førespurnaden gjennom både oppsettet av HttpClient-svaret og lesinga av innhaldet, i staden for å måle berre ventetida til den som kallar.
Ei stoppeklokke kan slutte å vente medan HTTP-førespurnaden held fram. Gi avbrot til sjølve operasjonen når eit proxyforsøk har eit tiltenkt tidsbudsjett.
For ein moderne .NET-applikasjon med ein eksisterande 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 same budsjettet startar før oppsettet og er aktivt medan innhaldet blir lese. ResponseHeadersRead gir kontrollen tilbake etter hovuda, så tidsavbrotet til HttpClient åleine avgjer ikkje budsjettet for den seinare innhaldslesinga.
Hald avbrot skilt frå HTTP-status og transportfeil. Ein OperationCanceledException kan kome frå tokenet du sende med eller frå eit anna konfigurert tidsavbrot; gransk den aktuelle avbrotkjelda i staden for å melde kvar feil som ein død proxy.
Bruk klienten som eig denne proxyruta om att. Å avbryte eitt forsøk tyder ikkje at heile tilkoplingspoolen må byggjast opp att for kvar seinare førespurnad.
Dømet buffrar eit avgrensa svarsinnhald. Ei strøymande nedlasting bør sende tokenet gjennom strømkopieringsløkka og frigi svaret på kvar utgangsveg.
Avbrot uttrykkjer ein operasjonspolitikk, ikkje eit nøyaktig klokkeløfte for kvar plattformhandling. Unngå å bytte det ut med ei endelaus spørjeløkke over Task.IsCompleted.