Un cronometru poate înceta să aștepte în timp ce cererea HTTP continuă. Oferă anularea operației înseși când o încercare prin proxy are un buget de timp stabilit.

Pentru o aplicație .NET modernă care are deja un HttpClient configurat pentru 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);

Același buget începe înainte de pregătire și rămâne activ cât timp se citește corpul. ResponseHeadersRead returnează controlul după antete, așa că timeout-ul propriu al HttpClient nu definește singur bugetul pentru citirea ulterioară a corpului.

Ține anularea separată de statusul HTTP și de erorile de transport. O OperationCanceledException poate veni din tokenul furnizat sau dintr-un alt timeout configurat; verifică sursa de anulare aplicabilă în loc să raportezi fiecare eșec ca proxy mort.

Refolosește clientul care deține această rută de proxy. Anularea unei încercări nu înseamnă reconstruirea întregului pool de conexiuni pentru fiecare cerere ulterioară.

Exemplul memorează în buffer un corp de răspuns de dimensiune finită. La descărcarea în flux, tokenul trebuie transmis prin bucla de copiere a fluxului, iar răspunsul eliberat pe fiecare cale de ieșire.

Anularea exprimă o politică a operației, nu o promisiune exactă de timp pentru fiecare acțiune a platformei. Evită să o înlocuiești cu o buclă infinită de interogare a Task.IsCompleted.

Articole similare