正确的使用HttpClient
快捷的网络请求,多用HttpClient
但是常规的写法会一大片的TIME_OUT
比如这样的例子
static async Task<string> TestHttpClient(string url)
{
using (var httpClient = new HttpClient())
{
var response = await httpClient.GetAsync(url);
var context = response.Content;
var result = await context.ReadAsStringAsync(); return result;
}
}
HttpClient内部是线程安全的,所以可以改为
static async Task<string> TestHttpClient(HttpClient httpClient, string url)
{
var response = await httpClient.GetAsync(url);
var context = response.Content;
var result = await context.ReadAsStringAsync(); return result;
}
但是很多场景下,这样却不方便~
那我们改一下
注入一个可以拿到单实例的HttpClient的接口,用这个接口就好了
public interface IHttpClientSingle
{
HttpClient Single { get; }
} internal class HttpClientSingle : IHttpClientSingle
{
public HttpClient Single { get; } public HttpClientSingle()
{
Single = new HttpClient();
}
}
在入口注入一下
services.AddSingleton<IHttpClientSingle, HttpClientSingle>();
需要HttpClient对象的地方就调用这个Single属性就好了
到这里是不是就搞定了,听闻.net core 2.1有个方案叫HttpClientFactory就解决这个问题呢?
它的本质是储存了一组HttpClientHandler,HttpClient构造方法里面,有一个重载的方法第一个参数传入,第二个参数置为False
参考地址:
代码行号124、125行
这个是我自己研究出来之后,再对照了一下实现,发现思路是一个
HttpClientHandler这个在.net core 2.0就有,更早版本就没追述了
到底是微软的坑,还是错误的用法的锅呢?陷入沉思
附上一组测试的代码
static async void Test1(string url,int count)
{
using (var httpClientHandle = new HttpClientHandler())
{
for (int i = ; i < count; i++)
{
using (var httpClient = new HttpClient(httpClientHandle, false))
{
var response = await httpClient.GetAsync(url);
var context = response.Content;
var result = await context.ReadAsStringAsync(); Console.WriteLine($"{result}");
}
}
} Console.WriteLine("End");
}
正确的使用HttpClient的更多相关文章
- Asp.Net Core 轻松学-HttpClient的演进和避坑
前言 在 Asp.Net Core 1.0 时代,由于设计上的问题, HttpClient 给开发者带来了无尽的困扰,用 Asp.Net Core 开发团队的话来说就是:我们注意到,HttpC ...
- .NetCore 2.1中的HttpClientFactory最佳实践
.NET Core 2.1中的HttpClientFactory最佳实践 ASP.NET Core 2.1中出现一个新的HttpClientFactory功能, 它有助于解决开发人员在使用HttpCl ...
- .NET Core 2.1中的HttpClientFactory最佳实践
ASP.NET Core 2.1中出现一个新的HttpClientFactory功能, 它有助于解决开发人员在使用HttpClient实例从其应用程序发出外部Web请求时可能遇到的一些常见问题. 介绍 ...
- 目录---Asp.NETCore轻松学系列【目录】
随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...
- 【目录】Asp.NETCore轻松学系列
随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...
- HttpClientFactory的套路,你知多少?
背景 ASP.NET Core 在 2.1 之后推出了具有弹性 HTTP 请求能力的 HttpClient 工厂类 HttpClientFactory. 替换的初衷还是简单摆一下: ① using(v ...
- .NET Core 中正确使用 HttpClient 的姿势
为了更方便在服务端调用 HTTP 请求,微软在 .NET Framework 4.x 的时候引入了 HttpClient.但 HttpClient 有很多严重问题,一直饱受诟病,比如 InfoQ 的这 ...
- Lind.DDD.Utils.HttpHelper关于对HttpClient的正确使用
回到目录 官方的不一定是对的,机器最能证明一切 不知道从什么时候起,我们在写数据库连接,网络连接,文件操作时会习惯加上using,这种习惯被我们误称为一种模式,但事实上,一切事情都有因有果的,使用us ...
- HttpClient在.NET Core中的正确打开方式
问题来源 长期以来,.NET开发者都通过下面的方式发送http请求: using (var httpClient = new HttpClient()) { var response = await ...
随机推荐
- GAN网络从入门教程(三)之DCGAN原理
目录 DCGAN简介 DCGAN的特点 几个重要概念 下采样(subsampled) 上采样(upsampling) 反卷积(Deconvolution) 批标准化(Batch Normalizati ...
- 【Python篇】工厂模式
工厂方法模式 前言 在<设计模式>一书中工厂模式提到了: 工厂方法模式(Factory Method) 抽象工厂模式 (Abstract Factory) 但是在实际过程中还有一种工厂模式 ...
- Oracle数据库期末总结
目录 基础内容-服务相关 Oracle体系结构: 表空间与数据文件之间的关系: 内存结构(SGA ,PGA) 表空间(大题)(tablespace) 数据文件(大题)(.dbf) 控制文件,记录和维护 ...
- 机器学习实战基础(十九):sklearn中数据集
sklearn提供的自带的数据集 sklearn 的数据集有好多个种 自带的小数据集(packaged dataset):sklearn.datasets.load_<name> 可在 ...
- hihoCoder 1114 小Hi小Ho的惊天大作战:扫雷·一 最详细的解题报告
题目来源:小Hi小Ho的惊天大作战:扫雷·一 解题思路:因为只要确定了第一个是否有地雷就可以推算出后面是否有地雷(要么为0,要么为1,如果不是这两个值就说明这个方案行不通),如果两种可能中有一种成功, ...
- 第一部分软件测试综述——软件测试背景【软件测试】(美)Ron Patton中文电子版
截取自:第一部分软件测试综述——软件测试背景[软件测试](美)Ron Patton中文电子版(有需要的可以关注我) 第一部分软件测试综述 对手的程序死掉叫崩溃.自己的程序死掉叫“身体不良反应(idio ...
- 性能测试必备知识(2)- 查看 Linux 的 CPU 相关信息
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 查看系统 CPU 信息 cat /proc/ ...
- js:数组(创建、遍历、函数)
1.数组 采用单个变量只能存储一个数据,数组能够存储多个数据,获取方式也比较简单.它是将一组数据存储在当个变量下的存储方式. 2.数组的创建 (1)new方式创建,不指定数组长度 <script ...
- HashTable、HashMap与ConCurrentHashMap源码解读
HashMap 的数据结构 hashMap 初始的数据结构如下图所示,内部维护一个数组,然后数组上维护一个单链表,有个形象的比喻就是想挂钩一样,数组脚标一样的,一个一个的节点往下挂. 我们可以 ...
- three.js 数学方法之Box3
从今天开始郭先生就会说一下three.js 的一些数学方法了,像Box3.Plane.Vector3.Matrix3.Matrix4当然还有欧拉角和四元数.今天说一说three.js的Box3方法(B ...