异步Web请求最佳实践

8

如何异步获取Web请求的最佳实践?

我想下载互联网上的页面(无所谓哪个页面),尽可能地避免阻塞线程。

以前我认为只需使用“BeginGetResponse”和“EndGetResponse”对即可。但仔细检查后,我也发现有使用“BeginGetRequestStream”的选项。

[更新] GetRequestStream用于POST操作

而且更加混乱的是,我是否应该使用stream.BeginRead和EndRead?

[更新] 这篇文章建议使用Stream.BeginRead异步处理HttpResponse.GetResponseStream更好。

真是一团糟啊!

有人可以指导我正确的方向吗?

最佳实践是什么?

3个回答

5

你可以自己编写代码,也可以使用WebClient来完成大部分的工作。例如,要将文件下载为字符串,你只需要调用DownloadStringAsync()方法,最终会触发OnDowloadStringCompleted事件。如果文件是二进制的,你可以尝试使用DownloadDataAsync()方法。


0
  1. 使用Begin/EndGetResponse异步等待HTTP响应。如果您正在进行POST并需要异步发送大量数据,请使用Begin/EndGetRequestStream。

  2. 这不是异步通信特有的 - 您可以查找同步版本以获取其他信息。

  3. 我不确定为什么您要在请求流上执行读取操作 - 最有可能的是您将对其进行写入,并从响应流中读取。

最后,Jeffrey Richter's blog有一篇关于HttpWebRequest和流的微妙之处的文章。


是的,我认为我对“BeginGetRequestStream”的目的感到困惑了。 - Andrew Harry

0

1
启动一个新线程并不是最理想的选择。仅仅阻塞另一个线程并不能帮助这个应用程序扩展。 - Andrew Harry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接