首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我们同时需要BeginGetResponse和BeginRead?

为什么我们同时需要BeginGetResponse和BeginRead?
EN

Stack Overflow用户
提问于 2012-02-22 08:35:11
回答 2查看 378关注 0票数 0

我正在看下面关于使用C#发出异步web请求的参考资料:

http://msdn.microsoft.com/en-us/library/86wf6409%28v=vs.100%29.aspx

当我仅使用BeginGetResponse和EndGetResponse构建示例代码时,我的“异步调用”仍然需要数百毫秒才能完成。

有人能解释一下为什么读取需要另一个异步调用,而BeginGetResponse应该已经在单独的线程上了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-22 09:15:36

我认为这映射到了底层的套接字操作。BeginGetResponse建立到服务器的连接(这就是为什么需要这么长时间)并发送请求,而BeginRead等待响应数据。

票数 2
EN

Stack Overflow用户

发布于 2012-02-22 10:17:45

因为BeginGetResponse/EndGetResponse必须连接到Http端点(服务器可能需要一些时间才能响应),而BeginRead/EndRead必须从响应流读取可能很长的响应。

想象一下,您的响应需要10秒才能在服务器上生成,并且它输出的数据量是10MB。

  • 如果没有第一对Begin/EndGetResponse调用,线程将被阻塞至少10秒,等待响应的第一个字节返回。
  • 如果没有第二组Begin/EndRead调用,当您一次一个网络数据包读取10MB数据时,线程将被阻塞(请记住,TCP数据包的大小有限,因此它们都需要一段时间才能返回客户端)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9387539

复制
相关文章

相似问题

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