以异步方式获取网络请求的最佳做法是什么?
我想从互联网上下载一个页面(无所谓) 并尽可能避免阻塞线程。
以前我认为仅仅使用'BeginGetResponse'和'EndGetResponse'对就足够了。但仔细观察后,我也发现可以选择使用'BeginGetRequestStream'
[更新] GetRequestStream用于POST操作
然后再加上困惑,我应该使用stream.BeginRead和EndRead吗?
[更新] 这个article建议使用Stream.BeginRead异步处理HttpResponse.GetResponseStream
多么糟糕!
有人能指出我正确的方向吗?
什么是最佳实践?
答案 0 :(得分:5)
您可以自己编写代码,也可以使用WebClient为您完成大量繁重的工作。例如,要将文件作为字符串下载,您可以调用DownloadStringAsync(),最终将触发OnDowloadStringCompleted事件。如果文件是二进制文件,您可以尝试使用DownloadDataAsync()。
答案 1 :(得分:1)
以下文章似乎有一个关于使用线程异步使用HttpWebRequest的好教程:
http://www.developerfusion.com/code/4654/asynchronous-httpwebrequest/
答案 2 :(得分:0)
使用Begin / EndGetResponse异步等待HTTP响应。如果您正在进行POST并且需要异步发送大量数据,请使用Begin / EndGetRequestStream。
这不是异步通信所特有的 - 您可以查找同步版本以获取其他信息。
我不确定你为什么要对请求流进行读取 - 很可能你会写入它,并从Response流中读取。
最后,Jeffrey Richter's blog有一篇关于HttpWebRequest和流的一些细微之处的文章。
答案 3 :(得分:0)
您是否考虑过在新主题中执行网络请求?