¿Cómo utilizar HttpWebRequest (.NET) de forma asincrónica?

Resuelto Jason asked hace 15 años • 10 respuestas

¿Cómo puedo utilizar HttpWebRequest (.NET, C#) de forma asincrónica?

Jason avatar Oct 15 '08 02:10 Jason
Aceptado

UsarHttpWebRequest.BeginGetResponse()

HttpWebRequest webRequest;

void StartWebRequest()
{
    webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);
}

void FinishWebRequest(IAsyncResult result)
{
    webRequest.EndGetResponse(result);
}

La función de devolución de llamada se llama cuando se completa la operación asincrónica. Necesitas al menos llamar EndGetResponse()desde esta función.

Jon B avatar Oct 14 '2008 21:10 Jon B

Con diferencia, la forma más sencilla es utilizar TaskFactory.FromAsync de TPL . Son literalmente un par de líneas de código cuando se usan junto con las nuevas palabras clave async/await :

var request = WebRequest.Create("http://www.stackoverflow.com");
var response = (HttpWebResponse) await Task.Factory
    .FromAsync<WebResponse>(request.BeginGetResponse,
                            request.EndGetResponse,
                            null);
Debug.Assert(response.StatusCode == HttpStatusCode.OK);

Si no puede usar el compilador C#5, lo anterior se puede lograr usando el método Task.ContinueWith :

Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse,
                                    request.EndGetResponse,
                                    null)
    .ContinueWith(task =>
    {
        var response = (HttpWebResponse) task.Result;
        Debug.Assert(response.StatusCode == HttpStatusCode.OK);
    });
Nathan Baulch avatar Apr 11 '2014 05:04 Nathan Baulch