Stopky môžu prestať čakať, kým HTTP požiadavka stále pokračuje. Odovzdajte zrušenie samotnej operácii, keď má pokus cez proxy zamýšľaný časový rozpočet.

Pre modernú aplikáciu .NET s existujúcim HttpClient nakonfigurovaným na proxy:

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);

Ten istý rozpočet sa začína pred prípravou a zostáva aktívny počas čítania tela. ResponseHeadersRead vráti riadenie po hlavičkách, takže vlastný časový limit HttpClient sám o sebe neurčuje rozpočet neskoršieho čítania tela.

Držte zrušenie oddelene od stavu HTTP a chýb prenosu. OperationCanceledException môže pochádzať z odovzdaného tokenu alebo z iného nastaveného časového limitu; overte príslušný zdroj zrušenia namiesto toho, aby ste každé zlyhanie hlásili ako mŕtvu proxy.

Znovu použite klienta, ktorému patrí táto proxy trasa. Zrušenie jedného pokusu neznamená prestavať celý fond pripojení pre každú ďalšiu požiadavku.

Príklad ukladá do vyrovnávacej pamäte telo odpovede konečnej veľkosti. Pri streamovanom sťahovaní treba token odovzdať cez slučku kopírovania streamu a odpoveď uvoľniť na každej výstupnej ceste.

Zrušenie vyjadruje politiku operácie, nie presný časový prísľub pre každú akciu platformy. Nezastupujte ho nekonečnou slučkou kontroly Task.IsCompleted.

Súvisiace články