gpt4 book ai didi

.net - HttpClientFactory.Create 与新的 HttpClient

转载 作者:行者123 更新时间:2023-12-01 18:42:04 25 4
gpt4 key购买 nike

我很好奇 HttpClientFactory class 的目的是什么? 。 MSDN 上没有说明它为何存在(请参阅链接)。

Create methods有更专门的参数,但我主要想知道不带参数的调用和普通构造函数之间有什么区别。

<小时/>
var httpClient = HttpClientFactory.Create();

VS

var httpClient = new HttpClient();
<小时/>

在大多数示例中,我看到使用 new HttpClient(),而没有任何 using 语句,即使 HttpClient class派生自IDisposable

由于HttpClient类派生自IDisposable,工厂是否完成了一些池化或缓存?是否有性能优势,或者并不重要?

更新 – .NET Core 2.1 中的IHttpClientFactory

请注意,自从提出这个问题以来,.NET 的新版本已经发布,并且 .NET Core 2.1 引入了一种新的且经过大幅改进的方法来获取 HTTP 客户端。

请参阅下面 Ali Bayat 的回答,了解如何使用 IHttpClientFactory 代替 .NET Core。

但是,我将 Darrel Miller 的答案保留为可接受的答案,因为这是在 .NET Framework v4.8 之前使用的正确答案,正是针对该问题提出的。

使用 .NET 5,.NET Framework 和 .NET Core 之间的差异将得到调整,您应该改用 IHttpClientFactory

更新 - 官方指导

Microsoft 添加了有关处置行为和建议使用的文档: https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/httpclient-guidelines

最佳答案

工厂是一种辅助方法,当管道中有多个 DelegatingHandler 时,它可以帮助创建客户端。委托(delegate)处理程序需要连接在一起以形成管道。该工厂允许您将处理程序作为数组传递,工厂将负责将它们连接在一起。

我相信,但不要相信我的话,CreatePipeline 方法可以在服务器端使用来为 Web API HttpServer 构建消息处理管道。

我很高兴您没有看到很多围绕 HTTPClient 使用 block 的示例,因为我多年来一直在与这种做法作斗争。尽管 HttpClient 确实实现了一次性,但它仅用于处理请求正在进行时被破坏的异常情况。 HttpClient 实例应该是长期存在的。处理它们会强制关闭应该池化的底层 TCP 连接。 HttpClient 是线程安全的,可以被不同线程安全地多次使用。这就是它的使用方式,而不是一次性使用,使用我经常看到的 block 模式。

关于.net - HttpClientFactory.Create 与新的 HttpClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18976042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com