Avbryt en .NET HttpClient-forespørsel via en proxy med et fristtoken
Avbryt selve nettverksoperasjonen når fristen for proxyen utløper, i stedet for å bare avslutte ventingen til den som kaller.
Overlever fristen til operasjonen som kan avbryte nettverksarbeidet. For en eksisterende .NET HttpClient som er konfigurert via en proxy:
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);Applikasjonen leverer client og uri. Denne overlasten mottar avbrytelsestokenet; en tidsgrense rundt ventingen på oppgaven ville bare begrense ventingen for nettopp denne kalleren. Å polle et fullføringsflagg har det samme problemet: kalleren kan gå mens sockets og arbeidere fortsatt er opptatte.
Avbrytelse følger klientens implementering og oppryddingsløp. Det lover ikke at hver handling på lavere nivå stopper på en eksakt instruksjon. La det løpet fullføre og frigjør ressursene som 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 er nødvendig og unngå å miste oppgaven mens erstatninger startes i det uendelige. Ellers kan et tregt endepunkt samle arbeid raskere enn applikasjonen frigjør det.
Det eksterne utfallet trenger egen behandling. Målet kan allerede ha mottatt en innsending når avbrytelsen skjer. Bruk applikasjonens gjenopprettings- eller idempotenspolicy; å stoppe lokalt arbeid angrer ikke en ekstern handling.