Օգտագործեք մեկ CancellationToken .NET HttpClient-ի վերնագրերի և մարմնի համար
Փոխանցեք հարցման CancellationToken-ը թե՛ HttpClient-ի պատասխանի պատրաստման, թե՛ մարմնի ընթերցման ընթացքում՝ փոխարենը չափելու միայն կանչողի սպասումը։
Վայրկյանաչափը կարող է դադարել սպասել, քանի դեռ HTTP հարցումը շարունակվում է։ Տրամադրեք չեղարկում հենց գործողությանը, երբ պրոքսիով փորձն ունի նախատեսված բյուջե։
Ժամանակակից .NET հավելվածի համար, որն ունի գոյություն ունեցող պրոքսիով կարգավորված HttpClient։
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-ի վրա անվերջ հարցումների ցիկլով փոխարինելուց։