2009-02-23 16 views
8

¿Cuál es la mejor práctica para obtener una webrequest de forma asincrónica?Buenas prácticas de Webrequest asíncronas

Quiero descargar una página de Internet (no importa qué) y evitar bloquear un hilo tanto como sea posible.

Anteriormente creía que era suficiente usar el par 'BeginGetResponse' y 'EndGetResponse'. Sin embargo, un examen más detallado también veo que existe la opción de usar 'BeginGetRequestStream'

[ACTUALIZACIÓN] GetRequestStream se utiliza para operaciones de POST

Y a continuación, a añadir a la confusión, ¿Debo estar usando corriente. BeginRead y EndRead?

[ACTUALIZACIÓN]article esto sugiere que es aún mejor para procesar la HttpResponse.GetResponseStream de forma asíncrona mediante Stream.BeginRead

Qué lío!

¿Puede alguien señalarme en la dirección correcta?

¿Cuál es la mejor práctica?

Respuesta

0
  1. Se utilizan Comenzar/EndGetResponse que esperar asynchonously de la respuesta HTTP. Si está haciendo una POST y necesita enviar una gran cantidad de datos de forma asíncrona, use Begin/EndGetRequestStream.

  2. Esto no es exclusivo de la comunicación asincrónica: puede buscar las versiones síncronas para obtener información adicional.

  3. No estoy seguro de por qué harías una lectura en el flujo de solicitudes; lo más seguro es que estés escribiendo en ella y leyendo de la secuencia de respuestas.

Por último, Jeffrey Richter's blog tiene un artículo sobre algunas de las sutilezas de HttpWebRequest y corrientes.

+0

sí, creo que me confundieron con el propósito de 'BeginGetRequestStream' –

5

Se podría codificar esta todo usted mismo o usted podría utilizar WebClient, que hace una gran parte del trabajo por ti. Por ejemplo, para descargar un archivo como una cadena, debería llamar a DownloadStringAsync(), que eventualmente activará el evento OnDowloadStringCompleted. Si el archivo es binario, puede intentar usar DownloadDataAsync() en su lugar.

Cuestiones relacionadas