了解异步HttpWebRequest

mpe*_*pen 2 c# asynchronous httpwebrequest httpwebresponse

我试图弄清楚它是如何工作的.

HttpWebRequest有一个BeginGetResponse接受参数a的方法ResponseCallback.首先,这个回调是立即调用(在新线程中)还是从服务器收到响应?或者是EndGetResponse等待响应的工作?

其次,一旦你有了响应,就可以立即访问响应流,但是在完成下载之前,流不包含整个页面,因此BeginRead.但是,我似乎能够通过像这样的属性立即访问所有标题HttpWebResponse.ContentLength.这是否意味着EndGetResponse在标题完全下载之前不会完成,或者是在调用ContentLength参数时它会挂起一点直到收到标题?

Ben*_*zun 5

Begin*和End*模式始终相同:

  • 将AsyncCallback传递给Begin
  • 等待回调的调用(不是立即的)
  • 始终在回调中呼叫结束*
  • 检查回调/ IAsyncResult是否成功(它被取消了吗?有异常/错误吗?)
  • 在这里使用结束*的结果..

您的案例中的结果是一个WebResponse实例,其中包含Headers.所以我认为可以安全地假设响应的那部分已经收到:WebResponse对象没有隐藏在其属性中的异步魔法.如果您访问ContentLength,它只是一个常规属性,并且对象不知道或不关心您是否使用阻塞或异步调用.