【问题标题】:HttpWebRequest.BeginGetResponse is not AsyncHttpWebRequest.BeginGetResponse 不是异步的
【发布时间】:2011-03-31 16:50:26
【问题描述】:

我有一些代码迭代了 100 个 url 并从网络请求数据。

看起来像这样

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,问题是一样的

似乎答案应该是here,但它对我不起作用

我是 WPF 4.0

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

【问题讨论】:

  • 谢谢,头晕!有谁给我答案吗?
  • 我认为我的问题是我使用的是 POST,而不是 GET。我会检查这个然后 POST (duh!)

标签: wpf vb.net .net-4.0 asynchronous httpwebrequest


【解决方案1】:

是的

问题出在 POST 上

我现在就这样开始写文章

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

希望这对将来的某人有所帮助

【讨论】:

    【解决方案2】:

    从另一个question转发此帖。

    来自documentation on HttpWebRequest.BeginGetResponse Method

    BeginGetResponse 方法需要在此方法变为异步之前完成一些同步设置任务(例如 DNS 解析、代理检测和 TCP 套接字连接)。 [...] 在引发错误异常或方法成功之前,完成初始同步设置任务可能需要相当长的时间(长达几分钟,具体取决于网络设置)。

    为避免等待设置,您可以使用 HttpWebRequest.BeginGetRequestStream Method 但请注意:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多