using (WebResponse response = request.GetResponse())
{
    response.GetResponseStream().CopyTo(destination);
}

Mantenha cada resposta herdada de HttpWebRequest em um escopo que conclua seu consumo e a libere. Aqui destination é o fluxo de saída gravável da aplicação; o bloco using libera o WebResponse mesmo se a cópia falhar, sem assumir a propriedade dessa saída.

Uma solicitação de proxy ter sucesso e as seguintes esperarem pode indicar respostas inacabadas ocupando recursos de conexão. Apenas receber o WebResponse não conclui seu corpo. O tempo limite da solicitação limita uma espera, não o tempo de vida de cada resposta já obtida.

Aplique a mesma propriedade aos erros. Uma WebException pode carregar uma resposta que seu código inspeciona; feche-a após a inspeção. Uma falha de transporte pode não ter resposta alguma.

A liberação devolve os recursos da resposta, mas não promete conexões reutilizáveis em todos os casos. Protocolo, servidor e consumo do corpo ainda importam.

Isso diz respeito à manutenção da pilha WebRequest herdada. Em código mais recente, siga a propriedade de resposta/fluxo do cliente real; para HttpClient, mantenha as respostas dentro do escopo de liberação, e distinga essa falha de limpeza da autenticação de proxy ou da seleção de rota.

Artigos relacionados