异步Webrequest最佳实践

时间:2009-02-23 03:23:16

标签: .net asynchronous httpwebrequest

以异步方式获取网络请求的最佳做法是什么?

我想从互联网上下载一个页面(无所谓) 并尽可能避免阻塞线程。

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

[更新] GetRequestStream用于POST操作

然后再加上困惑,我应该使用stream.BeginRead和EndRead吗?

[更新] 这个article建议使用Stream.BeginRead异步处理HttpResponse.GetResponseStream

多么糟糕!

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

什么是最佳实践?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

以下文章似乎有一个关于使用线程异步使用HttpWebRequest的好教程:

http://www.developerfusion.com/code/4654/asynchronous-httpwebrequest/

答案 2 :(得分:0)

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

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

  3. 我不确定你为什么要对请求流进行读取 - 很可能你会写入它,并从Response流中读取。

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

答案 3 :(得分:0)

您是否考虑过在新主题中执行网络请求?

http://msdn.microsoft.com/en-us/library/ms173178.aspx