异步Webrequest最佳实践

And*_*rry 8 .net asynchronous httpwebrequest

异步获取Web请求的最佳做法是什么?

我想从互联网上下载页面(无关紧要),并尽可能避免阻塞线程.

以前我认为只使用'BeginGetResponse'和'EndGetResponse'对就足够了.但仔细观察后我也发现可以选择使用'BeginGetRequestStream'

[UPDATE] GetRequestStream用于POST操作

然后添加到混乱中,我应该使用stream.BeginRead和EndRead吗?

[更新]这个文章表明,它是更好的处理异步使用Stream.BeginRead的HttpResponse.GetResponseStream

真是一团糟!

有人能指出我正确的方向吗?

什么是最佳实践?

chu*_*ckj 5

您可以自己编写这些代码,也可以使用WebClient为您完成大量繁重的工作.例如,要将文件作为字符串下载,您可以调用DownloadStringAsync(),最终将触发OnDowloadStringCompleted事件.如果文件是二进制文件,您可以尝试使用DownloadDataAsync().


mbe*_*ish 0

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

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

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

最后,Jeffrey Richter 的博客有一篇关于 HttpWebRequest 和流的一些微妙之处的文章。