Štoparica lahko preneha čakati, medtem ko zahteva HTTP še teče. Ko ima poskus prek proxyja predviden časovni proračun, prepustite preklic sami operaciji.

Za sodobno aplikacijo .NET z obstoječim HttpClient, nastavljenim za 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);

Isti proračun se začne pred pripravo in ostane dejaven med branjem telesa. ResponseHeadersRead vrne nadzor po glavah, zato lastna časovna omejitev HttpClient sama po sebi ne določa proračuna poznejšega branja telesa.

Preklic ločite od statusa HTTP in transportnih napak. OperationCanceledException lahko izvira iz predanega žetona ali iz druge nastavljene časovne omejitve; preverite ustrezni vir preklica, namesto da bi vsako napako prijavili kot mrtv proxy.

Ponovno uporabite odjemalca, ki je lastnik te proxy poti. Preklic enega poskusa ne pomeni, da je treba za vsako naslednjo zahtevo znova zgraditi celoten nabor povezav.

Primer shranjuje v medpomnilnik telo odgovora končne velikosti. Pri pretočnem prenosu je treba žeton prepustiti zanki kopiranja toka in odgovor sprostiti na vsaki izhodni poti.

Preklic izraža politiko operacije, ne natančne urejene obljube za vsako dejanje platforme. Ne nadomestite ga z neskončno zanko preverjanja Task.IsCompleted.

Sorodni članki