Cancelar unha solicitude .NET HttpClient a través dun proxy cun token de prazo
Cancele a propia operación de rede cando vence o prazo do proxy, en lugar de esgotar só a espera do chamador.
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.