首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpWebRequest.BeginGetResponse不是异步的

HttpWebRequest.BeginGetResponse不是异步的
EN

Stack Overflow用户
提问于 2011-03-31 16:50:26
回答 2查看 2.9K关注 0票数 1

我有一些代码,迭代了几个100个urls,并从web请求数据。

看上去像这样

代码语言:javascript
复制
for each url in urls
  Dim hwr = CType(WebRequest.Create(url), HttpWebRequest)
  Dim rq = New ReqArgs
  rq.Url= url
  rq.Request = hwr
  Dim res = 
     hwr.BeginGetResponse(New AsyncCallback(AddressOf FinishWebRequest), rq)
  Dim a = 1
next

这个看起来还好吗?

为什么BeginGetresponse行在进入dim a=1之前大约需要2-3秒才能完成?

实际上,我进行了调试,我看到FinishWebRequest过程在到达Dim a=1之前完全运行。

那么这是异步吗?

我不会因为使用异步而获得任何时间。是我吗?还是有不同的方法做这件事?

要点是,主子程序应该发出300个请求并将控制返回到UI,然后FinishWebRequest应该在请求传入时,通过自己的线程和自己的时间缓慢地处理它们。

我该怎么做?

顺便说一句,主子运行在一个BackgroundWorker中,但是我检查了BackgroundWorker,问题是相同的。

答案似乎应该是这里,但这对我没有用。

我是WPF 4.0

感谢你的帮助和建议。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-03 09:34:35

是的

问题是在邮政方面

我现在开始写这样的文章

代码语言:javascript
复制
Dim ReqStream = hwr.BeginGetRequestStream(New AsyncCallback(AddressOf FinishRequestStream), rq)

然后我的回音是这样的

代码语言:javascript
复制
Sub FinishRequestStream(ByVal result As IAsyncResult)
    Dim ag = CType(result.AsyncState, ReqArgs)
    Dim postStream = ag.Request.EndGetRequestStream(result)
    Dim PostBytes = Encoding.UTF8.GetBytes(ag.PostText)
    postStream.Write(PostBytes, 0, PostBytes.Length)
    postStream.Close()
    Dim res = ag.Request.BeginGetResponse(New AsyncCallback(AddressOf FinishResponse), ag)
End Sub

希望这对将来的人有帮助。

票数 4
EN

Stack Overflow用户

发布于 2016-07-20 12:17:01

从另一个问题重新发布这篇文章。

来自关于HttpWebRequest.BeginGetResponse方法的文档

BeginGetResponse方法需要完成一些同步设置任务(例如,DNS解析、代理检测和TCP连接),然后此方法才会成为异步的。..。在引发错误或方法成功之前,可能需要相当长的时间(取决于网络设置)来完成初始同步设置任务。

为了避免等待安装程序,您可以使用HttpWebRequest.BeginGetRequestStream法,但要注意:

您的应用程序不能为特定请求混合同步和异步方法。如果调用BeginGetRequestStream方法,则必须使用BeginGetResponse方法检索响应。

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

https://stackoverflow.com/questions/5503375

复制
相关文章

相似问题

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