首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何异步使用HttpWebRequest (.NET)?

如何异步使用HttpWebRequest (.NET)?
EN

Stack Overflow用户
提问于 2008-10-15 03:22:28
回答 8查看 186.7K关注 0票数 160

如何异步使用HttpWebRequest (.NET,C#)?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-10-14 21:17:56

使用HttpWebRequest.BeginGetResponse()

代码语言:javascript
复制
HttpWebRequest webRequest;

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

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

当异步操作完成时,将调用回调函数。您至少需要从此函数调用EndGetResponse()

票数 128
EN

Stack Overflow用户

发布于 2014-04-11 13:15:08

到目前为止,最简单的方法是从TPL使用TaskFactory.FromAsync。当与新的async/await关键字结合使用时,字面上只有几行代码:

代码语言:javascript
复制
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方法来完成上面的操作:

代码语言:javascript
复制
Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse,
                                    request.EndGetResponse,
                                    null)
    .ContinueWith(task =>
    {
        var response = (HttpWebResponse) task.Result;
        Debug.Assert(response.StatusCode == HttpStatusCode.OK);
    });
票数 68
EN

Stack Overflow用户

发布于 2010-12-14 06:31:57

考虑一下答案:

代码语言:javascript
复制
HttpWebRequest webRequest;

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

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

您可以发送请求指针或任何其他类似如下的对象:

代码语言:javascript
复制
void StartWebRequest()
{
    HttpWebRequest webRequest = ...;
    webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), webRequest);
}

void FinishWebRequest(IAsyncResult result)
{
    HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;
}

问候

票数 67
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/202481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档