.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 бойынша шексіз сұрау циклімен алмастырудан аулақ болыңыз.