Annuller en .NET HttpClient-anmodning gennem en proxy med et deadline-token
Annuller selve netværkshandlingen, når en proxy-deadline udløber, i stedet for kun at afbryde den kaldendes ventetid.
Videregiv deadlinen til den handling, der kan annullere netværksarbejdet. For en eksisterende proxy-konfigureret .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 overbelastning modtager annulleringstokenet; en timeout omkring ventetiden på dens opgave ville kun begrænse netop den kaldendes ventetid. Afstemning af et færdiggørelsesflag har samme problem: den kaldende kan gå, mens sockets og arbejdstråde forbliver optaget.
Annullering følger klientens implementering og oprydningsvej. Den lover ikke, at enhver handling på lavere niveau stopper ved en præcis instruktion. Lad den vej afslutte, og frigør de ressourcer, som handlingen ejer. Medtag separat styret læsning af body i designet; for en moderne .NET ResponseHeadersRead-handling sendes det samme token gennem body-læsningen. Andre klienter tilbyder deres egne grænseflader til annullering, afbrydelse og oprydning.
Et nyt forsøg kræver et resultat for det forrige forsøg. Bevar dets id og den valgte proxy, anmod om annullering når det er nødvendigt, og undgå at miste opgaven, mens erstatninger startes i det uendelige. Ellers kan et langsomt endepunkt ophobe arbejde hurtigere, end programmet frigør det.
Det eksterne resultat kræver særskilt håndtering. Destinationen kan allerede have modtaget en indsendelse, når annulleringen sker. Brug programmets gendannelses- eller idempotenspolitik; at stoppe lokalt arbejde fortryder ikke en ekstern handling.