En stoppeklokke kan slutte å vente mens HTTP-forespørselen fortsatt pågår. Overlat avbrytelsen til selve operasjonen når et proxy-forsøk har et definert tidsbudsjett.

For et moderne .NET-program som allerede har en HttpClient satt opp med 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);

Budsjettet starter før oppsettet og gjelder også mens bodyen leses. ResponseHeadersRead leverer kontrollen tilbake etter headerne, så HttpClients egen tidsgrense fastsetter ikke alene grensen for den senere body-lesingen.

Skille avbrytelse fra HTTP-status og transportfeil. En OperationCanceledException kan stamme fra tokenet du sendte inn eller fra en annen konfigurert tidsgrense; sjekk hvilken avbruddskilde som gjelder i stedet for å stemple hver feil som død proxy.

Bruk den samme klienten som eier denne proxy-ruten. Å avbryte ett forsøk betyr ikke at hele tilkoblingspoolen må gjenopprettes for hver senere forespørsel.

Eksempelet mellomlagrer en avgrenset responsbody. En strømmende nedlasting bør sende tokenet gjennom kopiløkken og frigjøre responsen på alle utveier.

Avbrytelse uttrykker en operasjonspolicy, ikke en nøyaktig klokke-garanti for hver plattformhandling. Ikke bytt den ut med en endeløs undersøkelsesløkke på Task.IsCompleted.

Relaterte artikler