如何异步使用HttpWebRequest (.NET,C#)?
发布于 2008-10-14 21:17:56
使用HttpWebRequest.BeginGetResponse()
HttpWebRequest webRequest;
void StartWebRequest()
{
webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);
}
void FinishWebRequest(IAsyncResult result)
{
webRequest.EndGetResponse(result);
}
当异步操作完成时,将调用回调函数。您至少需要从此函数调用EndGetResponse()
。
发布于 2014-04-11 13:15:08
到目前为止,最简单的方法是从TPL使用TaskFactory.FromAsync。当与新的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);
如果您不能使用C#5编译器,那么可以使用Task.ContinueWith方法来完成上面的操作:
Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse,
request.EndGetResponse,
null)
.ContinueWith(task =>
{
var response = (HttpWebResponse) task.Result;
Debug.Assert(response.StatusCode == HttpStatusCode.OK);
});
发布于 2010-12-14 06:31:57
考虑一下答案:
HttpWebRequest webRequest;
void StartWebRequest()
{
webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);
}
void FinishWebRequest(IAsyncResult result)
{
webRequest.EndGetResponse(result);
}
您可以发送请求指针或任何其他类似如下的对象:
void StartWebRequest()
{
HttpWebRequest webRequest = ...;
webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), webRequest);
}
void FinishWebRequest(IAsyncResult result)
{
HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;
}
问候
https://stackoverflow.com/questions/202481
复制相似问题