.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 वर अंतहीन पोलिंग लूप ठेवून त्याची जागा घेऊ नका.