.NET HttpClient હેડર અને બોડી માટે એક જ CancellationToken વાપરો
વિનંતીનું CancellationToken HttpClient પ્રતિસાદ તૈયારી અને બોડી વાંચન બંનેમાં પસાર કરો, ફક્ત કૉલરની રાહ માપવાને બદલે.
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 પર અનંત પોલિંગ લૂપથી તેને બદલવાનું ટાળો.