.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 ئۈستىدىكى چەكسىز تەكشۈرۈش ھالقىسى بىلەن ئالماشتۇرماڭ.