代码之家  ›  专栏  ›  技术社区  ›  aepheus

异步httpwebrequest的一部分

  •  3
  • aepheus  · 技术社区  · 15 年前

    有许多与httpwebrequest相关的部分可以是异步的。我记得在这里读到一个关于这个话题的问题,但我似乎再也找不到了。所以我会重新问这个问题。以下哪一项可以说是最划算的。

    BeginGetRequestStream/EndGetRequestStream

    开始写入/结束写入

    BeginGetResponse/EndGetResponse

    开始/结束

    我理解BeginGetResponse必须与BeginGetRequestStream配对。因此,没有必要重申这一事实。

    从我所做的调查来看,BeginRead/EndRead似乎最有潜力。这有点令人震惊。看起来EndGetResponse返回得相当快,而且在“第一次接触”和读取任何实际数据之后都有明显的延迟。我很确定我会立即得到一些标题,然后是很长的延迟,然后是我想要的数据。

    我想我真正的问题是:我是不是做错了什么,是不是真正有价值的球员开始了?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Jon Hanna    15 年前

    EndGetResponse(或者同步GetResponse)在接收到数据的开头时返回。这可能是总响应时间的一小部分或一大部分。

    对于大量响应,大部分时间不会花在等待这些响应上,而是花在读取和处理流本身上。值得注意的是,这可以在数据进入时进行解析(特别是当Web服务器正在发送分块数据时)。

    因此,最大的性能优势在于以一种允许Efficient进入下一个级别的方式处理此问题。一种方法是使整个处理过程异步,而不是使用httpwebrequest的异步方法。

    另一种方法是,如果要从响应生成集合类型,则要使用 yield 基于ienumerable,允许在到达时进行处理(非常强大,通过将其传递给其他服务器,可以实现延迟执行) 产量 基于处理,或使用LINQ方法)。这样做的好处可能超过采用asych方法所获得的好处,尽管它们也可以结合起来。