我有一些代码,迭代了几个100个urls,并从web请求数据。
看上去像这样
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
感谢你的帮助和建议。谢谢
发布于 2011-04-03 09:34:35
是的
问题是在邮政方面
我现在开始写这样的文章
Dim ReqStream = hwr.BeginGetRequestStream(New AsyncCallback(AddressOf FinishRequestStream), rq)然后我的回音是这样的
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希望这对将来的人有帮助。
发布于 2016-07-20 12:17:01
从另一个问题重新发布这篇文章。
来自关于HttpWebRequest.BeginGetResponse方法的文档
BeginGetResponse方法需要完成一些同步设置任务(例如,DNS解析、代理检测和TCP连接),然后此方法才会成为异步的。..。在引发错误或方法成功之前,可能需要相当长的时间(取决于网络设置)来完成初始同步设置任务。
为了避免等待安装程序,您可以使用HttpWebRequest.BeginGetRequestStream法,但要注意:
您的应用程序不能为特定请求混合同步和异步方法。如果调用BeginGetRequestStream方法,则必须使用BeginGetResponse方法检索响应。
https://stackoverflow.com/questions/5503375
复制相似问题