Een .NET HttpClient-aanvraag via een proxy annuleren met een deadline-token
Annuleer de netwerkbewerking zelf wanneer een proxy-deadline verloopt, in plaats van alleen het wachten van de aanroeper te beëindigen.
Geef de deadline door aan de bewerking die het netwerkwerk kan annuleren. Voor een bestaande, via een proxy geconfigureerde .NET HttpClient:
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);De toepassing levert client en uri. Deze overbelasting ontvangt het annulatietoken; een time-out rond het wachten op zijn taak zou alleen het wachten van die aanroeper beperken. Het pollen van een voltooiingsvlag heeft hetzelfde probleem: de aanroeper kan weggaan terwijl sockets en workers bezet blijven.
Annulering volgt de implementatie van de client en het opruimpad. Het belooft niet dat elke actie op een lager niveau stopt bij een exacte instructie. Laat dat pad afronden en geef de resources vrij die de bewerking bezit. Neem apart geregeld lezen van de body op in het ontwerp; voor een moderne .NET ResponseHeadersRead-bewerking geeft u hetzelfde token door het lezen van de body. Andere clients bieden hun eigen interfaces voor annuleren, afbreken en opruimen.
Een nieuwe poging heeft een uitkomst nodig voor de vorige poging. Bewaar de identificatie en de gekozen proxy, vraag annulering aan wanneer nodig en voorkom dat de taak verloren gaat terwijl vervangers eindeloos worden gestart. Anders kan een traag eindpunt werk sneller opstapelen dan de toepassing het vrijgeeft.
De externe uitkomst vereist aparte afhandeling. De bestemming heeft mogelijk al een inzending ontvangen wanneer de annulering plaatsvindt. Gebruik het herstel- of idempotentiebeleid van de toepassing; lokaal werk stoppen maakt een externe actie niet ongedaan.