metodo c# httpwebrequest using httpwebresponse using-statement

metodo post c#



C#: "Usar" declaraciones con HttpWebRequests/HttpWebResponses (3)

Para evitar pérdidas de memoria, debe llamar a Dispose en cada objeto que implementa IDisposable. Puede asegurarse de que el método Dispose se invoque utilizando la palabra clave using (no pretende hacer un juego de palabras), ya que es solo un azúcar sintáctico para el bloqueo try-finally.

Jon Skeet hizo un comentario (a través de Twitter) en mi código SOApiDotNet (una biblioteca .NET para la API de desbordamiento de pila pre-alfa):

@ maximz2005 Una cosa que he notado es que solo he explorado la fuente rápidamente: no ha eliminado (sic) las respuestas web. "utilizando" las declaraciones FTW.

Él indica que necesito envolver estas sesiones web en "usar" declaraciones. Sin embargo, tengo una pregunta acerca de esto: ¿debo envolver todo, comenzar con HttpWebRequest , o debo crear WebRequest fuera de la declaración "utilizando" y luego envolver la Respuesta dentro ? Tengo la sensación de que la diferencia es que, en el primero, ambos objetos serían eliminados, ¿es esto correcto?

Gracias por adelantado.


Todo lo que esté envuelto en un bloque using () {} (es decir, dentro de los primeros corchetes) se elimina cuando abandona el ámbito.

No he usado tu biblioteca hasta ahora (aunque parece agradable), pero argumentaría que deberías eliminar explícitamente cada IDisposible que creas (= es responsable de) y no regresar a la persona que llama.

Una nota al margen, ya que he visto a muchas personas que luchan con varias cosas para disponer: en lugar de

using (var foo = SomeIDisposable) { using (var bar = SomeOtherIDisposable) { } }

Lo que necesita mucho espacio vertical puede escribir

using (var foo = SomeIDisposable) using (var bar = SomeOtherIDisposable) { }


HttpWebRequest sí no es desechable a diferencia de HttpWebResponse . Debe envolver los recursos desechables con el uso para permitir una limpieza temprana y determinada. IDisposable patrón IDisposable implementado correctamente permite que múltiples llamadas se IDisposable sin ningún problema, por lo que incluso el recurso de envoltura de la declaración externa que utiliza su propio recurso dispone del recurso de la declaración de uso interno.

Ejemplo de código

var request = (HttpWebRequest)WebRequest.Create("example.com"); using (var response = (HttpWebResponse)request.GetResponse()) { // Code here }