Pase o prazo á operación que pode cancelar o traballo de rede. Para un .NET HttpClient existente configurado con proxy:

using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);

A aplicación fornece client e uri. Esta sobrecarga recibe o token de cancelación; un tempo de espera arredor da espera da súa tarefa só limitaría a espera dese chamador. Sondar un indicador de finalización ten o mesmo problema: o chamador pode marchar mentres os sockets e os traballadores seguen ocupados.

A cancelación segue a implementación do cliente e a súa ruta de limpeza. Non promete que cada acción de nivel inferior se deteña nunha instrución exacta. Deixe que esa ruta remate e libere os recursos que posúe a operación. Inclúa no deseño a lectura do corpo controlada por separado; para unha operación .NET ResponseHeadersRead moderna, pase o mesmo token a través da lectura do corpo. Outros clientes ofrecen as súas propias interfaces de cancelación, aborto e limpeza.

Un reintento necesita un resultado para o intento anterior. Conserve o seu identificador e o proxy seleccionado, solicite a cancelación cando sexa necesario e evite perder a tarefa mentres inicia substitutos indefinidamente. Se non, un extremo lento pode acumular traballo máis rápido do que a aplicación o libera.

O resultado remoto necesita un tratamento aparte. Pode que o destino xa recibise un envío cando se produce a cancelación. Use a política de recuperación ou de idempotencia da aplicación; deter o traballo local non desfai unha acción remota.

Artigos relacionados