¿Cómo utilizar HttpWebRequest (.NET) de forma asincrónica?
¿Cómo puedo utilizar HttpWebRequest (.NET, C#) de forma asincrónica?
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.
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);
});