2009-02-23 127 views
8

异步获取webrequest的最佳做法是什么?异步Webrequest最佳实践

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

以前我相信只要使用'BeginGetResponse'和'EndGetResponse'对就足够了。但仔细观察后我也看到有使用“BeginGetRequestStream”

[更新]的选项 GetRequestStream用于POST操作

然后添加到困惑,我应该使用流。 BeginRead和EndRead?

[更新]这个article表明,它是更好的异步使用Stream.BeginRead

什么乱七八糟的处理HttpResponse.GetResponseStream!

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

什么是最佳实践?

回答

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

  2. 这不是异步通信的唯一方法 - 您可以查看同步版本以获取更多信息。

  3. 我不知道你为什么要对请求流进行读取 - 很可能你会写信给它,并从响应流中读取数据。

最后,Jeffrey Richter's blog大约有一些HttpWebRequest和流的细微之处的文章。

+0

是的,我认为我与'BeginGetRequestStream' – 2009-02-23 04:26:31

5

你可以这一切你自己的代码,或者你可以只使用Web客户端,其做了很多关于你繁重的工作中。例如,要将文件下载为字符串,您可以调用DownloadStringAsync(),最终将触发OnDowloadStringCompleted事件。如果该文件是二进制文件,则可以尝试使用DownloadDataAsync()。