HttpClientFactory.Create 与新的 HttpClient

2023-11-30

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

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


var httpClient = HttpClientFactory.Create();

VS

var httpClient = new HttpClient();

在大多数例子中我看到使用new HttpClient(),没有任何using声明,尽管HttpClient class源自于IDisposable.

自从HttpClient类源自IDisposable,工厂是否进行了一些池化或缓存?是否有性能优势,或者无关紧要?

更新 -IHttpClientFactory在 .NET Core 2.1 中

请注意,自从提出这个问题以来,.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 时,可帮助创建客户端。委托处理程序需要连接在一起以形成管道。该工厂允许您将处理程序作为数组传递,工厂将负责将它们连接在一起。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpClientFactory.Create 与新的 HttpClient 的相关文章

  • 在 System.Windows.Forms.RichTextBox 中禁用 VScrollbar 的绘制

    我有一个继承自 RichTextBox 的自定义控件 该控件能够 禁用 富文本编辑 我通过在 TextChanged 事件期间将 Rtf 属性设置为 text 属性来实现此目的 这就是我的代码的样子 private bool lockTex
  • 重试 polly 单元测试(xunit 和 moq)

    我有 net core weabpi 参见下面的代码 我正在使用 polly 重试策略 请参阅下面的策略 我想对端点 getProducts 进行单元测试并测试 polly 重试 我已经发现这些例子 https github com App
  • 是否可以在 VC++/CLI 中重写 IEnumerable?

    我有一个返回一个的接口IEnumerable 我想在 VC CLI 中实现这个 因为数据来自第三方非托管 DLL 到目前为止我有 public ref class MyEnumerable IEnumerable
  • 如何确保使用 Microsoft Sync Framework 同步成功?

    我正在使用微软同步框架 https msdn microsoft com en us sync bb736753 aspx同步两个 Microsoft SQL Server 上的表 我创建了一个测试应用程序 它每秒在远程服务器上的表中生成一
  • 为什么我的 WPF XAML Grid TranslateTransform.X 不会?

    我可以使用它来更改网格的宽度 高度 那么为什么当我这样使用 Grid RenderTransform TranslateTransform X 时它不起作用
  • 使用 3.5 或 4.0 等旧版 .net 学习 C#.net、asp.net 的主要概念或基本概念是否重要? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 请向我建议是否需要学习c net和asp net的主要概念或基本概念 我需要与使用旧版本 net框架3 5或4 0的公司合作 在工作时我可以学习
  • 找不到文件异常..但它就在那里

    嘿 这将是那些愚蠢的问题之一 我试图在本地系统上获取一个文件 但我不断收到FileNotFoundException thrown 请有人纠正我 if File Exists C logs hw healthways prod 2009 0
  • 如何从 httpclient 调用中获取内容正文?

    我一直在试图弄清楚如何读取 httpclient 调用的内容 但我似乎无法理解 我得到的响应状态是 200 但我不知道如何获取返回的实际 Json 这就是我所需要的 以下是我的代码 async Task
  • 获取计算机的MAC地址

    我想使用c 访问计算机的mac地址 我使用以下代码来访问 mac 地址 但此代码存在一些问题 Code 1 foreach NetworkInterface nic in NetworkInterface GetAllNetworkInte
  • PowerShell 和 StringBuilder

    我是 PowerShell 新手 但熟悉 NET 类 我在用System Text StringBuilder在 PowerShell 脚本中 脚本是这样的 Function MyStringFunc String line r New O
  • 通过 SSLStream 发送数据时出现数据包碎片

    当使用 SSLStream 将 大 数据块 1 兆 发送到 已通过身份验证的 客户端时 我看到的数据包碎片 分解是FAR比使用普通 NetworkStream 时更大 在客户端上使用异步读取 即 BeginRead 会重复调用 ReadCa
  • .Net 中是否有一个框架属性可以隐藏成员以使其免受反射?

    是否有一个属性可以隐藏成员 特别是属性 typeof MyType GetProperties 在 net中 我正在寻找快速修复方法 即不创建自定义属性等 thanks No 反射允许人们看到一切 包括标记为私有的成员 最终反射使用与 CL
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜
  • ASP.NET - 在 GridView 中显示图像和 pdf

    我想在 asp GridView 中显示 图像 列 这个想法是提供图像的缩略图以及实际尺寸图像的链接 对于某些行 这也可以是 PDF 文档 我想要 PDF 的链接 PDF 或图像存储在 SQL 数据库中 现在我在处理程序 ashx 文件中出
  • SQL 查询在多用户环境中返回错误值

    一段时间以来 我们在我们的一个客户站点上发现了奇怪的数据完整性问题 经过大量调查后 我们现在已将其隔离为数据库调用 如果两个用户同时调用同一个存储过程 有时一个用户会得到另一个用户的结果 我们设置了一个测试来验证这一点 并且我们有一个循环
  • 如何隐藏 Windows 窗体中控件的大小调整手柄?

    我有一个 UserControl 想在设计时隐藏调整大小手柄 就像 TextBoxControl 一样 它只有两个手柄 左手柄和右手柄 文本框的高度是固定的 除非你说它是多行的 在这种情况下 文本框会显示所有九个大小调整手柄 您需要实现一个
  • 实体框架 - 循环更新属性

    我正在尝试找到一种方法来循环 EF 对象的属性并更新这些属性的值 更具体地说 我有 50 个字段 其中最多填充 50 个下拉列表 所有 50 个可能都需要填充 也可能不需要填充 为了解决这个问题 我有一个中继器 最多可以创建 50 个 DD
  • 使用32位应用程序获取syswow64目录

    我正在尝试在系统目录中查找文件 问题是当使用 Environment SystemDirectory 在 x64 计算机上 我仍然获得 System32 目录 而不是 Systemwow64 目录 我需要在 x86 机器上获取 System
  • lambda 表达式是多线程的吗?

    lambda 表达式是多线程的吗 假设当你将数学公式编写为 lambda 方法时 当你将其传递给另一个方法时 它会是多线程的吗 不是100 清楚你问的是什么 您是否想问 lambda 是否自然地在不同的线程上运行 如果是这样 则它们只是 S
  • 中继命令和无参数执行方法

    我目前正在学习 WPF 和 MVVM 我想我已经了解了大部分内容及其工作原理 但我在使用 RelayCommand 或 DelegateCommand 时遇到了一些我不明白的问题 我认为这与代表的工作方式有关 请注意 下面的代码目前仅处于测

随机推荐