Avbryt en .NET HttpClient-forespørsel gjennom en proxy med et fristtoken
Avbryt selve nettverksoperasjonen når proxy-fristen utløper, i stedet for bare å avslutte den kallendes venting.
Send fristen til operasjonen som kan avbryte nettverksarbeidet. For en eksisterende proxy-konfigurert .NET HttpClient:
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);Programmet leverer client og uri. Denne overbelastningen mottar avbrytelsestokenet; en tidsavbrudd rundt ventingen på oppgaven ville bare begrense ventingen til akkurat denne kalleren. Avstemming av et fullføringsflagg har samme problem: den kallende kan gå mens sockets og arbeidere forblir opptatt.
Avbrytelse følger klientens implementasjon og oppryddingsvei. Den lover ikke at hver handling på lavere nivå stopper ved en nøyaktig instruksjon. La den veien fullføre og frigjør ressursene operasjonen eier. Ta med separat styrt lesing av body i designet; for en moderne .NET ResponseHeadersRead-operasjon sendes det samme tokenet gjennom body-lesingen. Andre klienter tilbyr egne grensesnitt for avbrytelse, stans og opprydding.
Et nytt forsøk trenger et utfall for det forrige forsøket. Behold identifikatoren og den valgte proxyen, be om avbrytelse når det trengs og unngå å miste oppgaven mens erstatninger startes i det uendelige. Ellers kan et tregt endepunkt samle arbeid raskere enn programmet frigjør det.
Det eksterne utfallet trenger egen behandling. Destinasjonen kan allerede ha mottatt en innsending når avbrytelsen skjer. Bruk programmets gjenopprettings- eller idempotenspolicy; å stoppe lokalt arbeid angrer ikke en ekstern handling.