Un cronòmetre pot deixar d'esperar mentre la sol·licitud HTTP continua. Proporcioneu cancel·lació a l'operació mateixa quan un intent de proxy tingui un pressupost previst.

Per a una aplicació .NET moderna amb un HttpClient configurat per a proxy existent:

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

El mateix pressupost comença abans de la configuració i roman actiu mentre es llegeix el cos. ResponseHeadersRead retorna el control després de les capçaleres, de manera que el temps d'espera de finalització propi de HttpClient no defineix per si sol el pressupost posterior de lectura del cos.

Manteniu la cancel·lació separada de l'estat HTTP i dels errors de transport. Una OperationCanceledException pot provenir del testimoni subministrat o d'un altre temps d'espera configurat; reviseu la font de cancel·lació aplicable en lloc d'informar de cada fallada com un proxy mort.

Reutilitzeu el client que posseeix aquesta ruta de proxy. Cancel·lar un intent no ha de significar reconstruir tot un pool de connexions per a cada sol·licitud posterior.

L'exemple búferitza un cos de resposta finit. Una descàrrega en streaming hauria de passar el testimoni pel seu bucle de còpia de flux i alliberar la resposta a cada camí de sortida.

La cancel·lació expressa una política d'operació, no una promesa exacta de rellotge de paret per a cada acció subjacent de la plataforma. Eviteu substituir-la per un bucle d'enquestació sense fi sobre Task.IsCompleted.

Articles relacionats