是的,我知道这个话题已经出现过很多次了。我知道 WebClient 是旧 HttpWebRequest 的包装器。我知道 HttpClient 是用于处理 HTTP 的较新的 API。
我有一个任务。有服务。它等待队列中的任务。他收到一个包含方法数据的任务。在这些方法数据中,有一个文件所在的 URL,必须按大小估计(已验证)并下载。我进行了一项研究,并意识到对于“下载文件”之类的任务,几乎总是建议使用 WebClient。问题是,在此任务的框架内,HttpClient 是否有优于 WebClient 的优势(我重复一遍,只需下载文件,之前已经收到了它的大小)?如果是,请说出哪些。
整个问题的关键在于,当你执行一个 I/O 操作时,你有 2 种方法,要么阻塞紧执行操作的线程,要么不阻塞。理论上,选择应该基于此,而不是“如何下载文件”——毕竟,就网络工作而言,这不是摆在您面前的唯一任务,对吧?
这就是它的完成方式
HttpClient
。可以这样吗
或者如果文件很小,那么即使如此
如您所见,如果您阅读文档,您会发现很多东西。好吧,你决定使用的代码行数
HttpClient
肯定不会增加,但是会有更多的机会。Async 一开始对很多人来说是很可怕的,但它确实不容易理解,但绝对值得努力去掌握它。从这个开始:异步编程。
第一个是现代的和异步的,第二个是过时的和同步的。
我什至对协议实现质量的差异、对
HttpClient
HTTP/2 和其他现代技术的支持保持沉默。好吧,它的速度也更高,尤其是在同时向服务器发出多个请求的情况下。此外,
HttpClient
微软推荐用于新开发,所有其他的都被HttpWebRequest
认为是过时的。WebRequest
WebClient
换句话说,你问的问题甚至没有争议。你不会问你应该为一个新项目使用哪个框架:3、4 或 5。显然,你会选择一个更新鲜的框架。这些客户也是如此。