.NET HttpClient హెడర్లు మరియు బాడీకి ఒకే CancellationToken ఉపయోగించండి
HttpClient ప్రతిస్పందన సిద్ధతలోనూ బాడీ చదవడంలోనూ అభ్యర్థన యొక్క CancellationToken ను అందించండి; పిలుచువాడి నిరీక్షణను మాత్రమే సమయం చేయవద్దు.
HTTP అభ్యర్థన కొనసాగుతుండగానే స్టాప్వాచ్ నిరీక్షణను ఆపవచ్చు. ప్రాక్సీ ప్రయత్నానికి నిర్ణీత సమయ బడ్జెట్ ఉన్నప్పుడు రద్దును చర్యకే అందించండి.
ఇప్పటికే ప్రాక్సీ కోసం కాన్ఫిగర్ చేసిన HttpClient ఉన్న ఆధునిక .NET అనువర్తనానికి:
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);
అదే బడ్జెట్ సిద్ధతకు ముందు మొదలై బాడీ చదివేటప్పుడు కూడా చురుకుగా ఉంటుంది. ResponseHeadersRead హెడర్ల తర్వాత నియంత్రణను తిరిగి ఇస్తుంది, కాబట్టి HttpClient యొక్క స్వంత సమయ పరిమితి తర్వాతి బాడీ పఠన బడ్జెట్ను తనంతటనే నిర్ణయించదు.
రద్దును HTTP స్థితి మరియు రవాణా లోపాల నుండి వేరుగా ఉంచండి. OperationCanceledException ఇచ్చిన టోకెన్ నుండి లేదా మరో కాన్ఫిగర్ చేసిన సమయ పరిమితి నుండి రావచ్చు; ప్రతి వైఫల్యాన్ని చచ్చిన ప్రాక్సీ అనకుండా సంబంధిత రద్దు మూలాన్ని పరిశీలించండి.
ఈ ప్రాక్సీ మార్గానికి యజమాని అయిన క్లయింట్నే మళ్లీ వాడండి. ఒక ప్రయత్నాన్ని రద్దు చేయడం అంటే ప్రతి తదుపరి అభ్యర్థనకు మొత్తం కనెక్షన్ పూల్ను పునర్నిర్మించడం కాదు.
ఉదాహరణ పరిమిత పరిమాణ ప్రతిస్పందన బాడీని బఫర్ చేస్తుంది. స్ట్రీమింగ్ డౌన్లోడ్లో టోకెన్ను స్ట్రీమ్ కాపీ లూప్ ద్వారా పంపి ప్రతి నిష్క్రమణ మార్గంలో ప్రతిస్పందనను విడుదల చేయాలి.
రద్దు అనేది చర్య యొక్క విధానాన్ని తెలియజేస్తుంది, ప్రతి ప్లాట్ఫారమ్ చర్యకు ఖచ్చితమైన గడియార హామీ కాదు. Task.IsCompleted పై అనంతమైన పోలింగ్ లూప్తో దాన్ని భర్తీ చేయవద్దు.