快捷的网络请求,多用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

参考地址:

DefaultHttpClientFactory.cs

代码行号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的更多相关文章

  1. Asp.Net Core 轻松学-HttpClient的演进和避坑

    前言     在 Asp.Net Core 1.0 时代,由于设计上的问题, HttpClient 给开发者带来了无尽的困扰,用 Asp.Net Core 开发团队的话来说就是:我们注意到,HttpC ...

  2. .NetCore 2.1中的HttpClientFactory最佳实践

    .NET Core 2.1中的HttpClientFactory最佳实践 ASP.NET Core 2.1中出现一个新的HttpClientFactory功能, 它有助于解决开发人员在使用HttpCl ...

  3. .NET Core 2.1中的HttpClientFactory最佳实践

    ASP.NET Core 2.1中出现一个新的HttpClientFactory功能, 它有助于解决开发人员在使用HttpClient实例从其应用程序发出外部Web请求时可能遇到的一些常见问题. 介绍 ...

  4. 目录---Asp.NETCore轻松学系列【目录】

    随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...

  5. 【目录】Asp.NETCore轻松学系列

    随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...

  6. HttpClientFactory的套路,你知多少?

    背景 ASP.NET Core 在 2.1 之后推出了具有弹性 HTTP 请求能力的 HttpClient 工厂类 HttpClientFactory. 替换的初衷还是简单摆一下: ① using(v ...

  7. .NET Core 中正确使用 HttpClient 的姿势

    为了更方便在服务端调用 HTTP 请求,微软在 .NET Framework 4.x 的时候引入了 HttpClient.但 HttpClient 有很多严重问题,一直饱受诟病,比如 InfoQ 的这 ...

  8. Lind.DDD.Utils.HttpHelper关于对HttpClient的正确使用

    回到目录 官方的不一定是对的,机器最能证明一切 不知道从什么时候起,我们在写数据库连接,网络连接,文件操作时会习惯加上using,这种习惯被我们误称为一种模式,但事实上,一切事情都有因有果的,使用us ...

  9. HttpClient在.NET Core中的正确打开方式

    问题来源 长期以来,.NET开发者都通过下面的方式发送http请求: using (var httpClient = new HttpClient()) { var response = await ...

随机推荐

  1. 推荐一款Python开源库,技术人必备的造数据神器!

    1. 背景 在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,要么需要手动制造一些数据.由于现在的业务系统数据多种多样,千变万化.在手动制造数据的 ...

  2. 如何让touchmove之后不触发touchend的事件

    手机扫码看效果 不多说,直接上代码 <ul id="Ul"> <li>111</li> <li>222</li> < ...

  3. Maven 专题(七):常用命令

    mvn archetype:generate : 反向生成项目的骨架 mvn clean: 清除各个模块target目录及里面的内容 mvn compile: 静态编译,根据xx.java生成xx.c ...

  4. 数据库01 /Mysql初识、基本指令、数据库密码相关、创建用户及授权

    数据库01 /Mysql初识.基本指令.数据库密码相关.创建用户及授权 目录 数据库01 /Mysql初识.基本指令.数据库密码相关.创建用户及授权 1. 数据库概述 2. 数据库管理系统/DBMS ...

  5. Django框架09 /ajax、crsf、settings导入

    Django框架09 /ajax.crsf.settings导入 目录 Django框架09 /ajax.crsf.settings导入 1. ajax概述 2. ajax应用 3. ajax上传文件 ...

  6. CentOS 7.0 x86_64官方正式版系统(64位)

    下载地址 http://www.xitongzhijia.net/linux/201603/69219.html

  7. 回文树(回文自动机)(PAM)

    第一个能看懂的论文:国家集训队2017论文集 这是我第一个自己理解的自动机(AC自动机不懂KMP硬背,SAM看不懂一堆引理定理硬背) 参考文献:2017国家集训队论文集 回文树及其应用 翁文涛 参考博 ...

  8. xilinx fpga 生成3*3窗口

    在写滤波程序的时候在网上看了好几篇大佬的笔记,都有提到使用3*3窗口,由于小白一个,看到复杂的理论就惧怕的不行.但是现在不得不上,自己调用移位寄存器ip核然后做了个3*3窗口出来,自己动手作出来忽然感 ...

  9. 支持向量机SMO算法实现(注释详细)

    一:SVM算法 (一)见西瓜书及笔记 (二)统计学习方法及笔记 (三)推文https://zhuanlan.zhihu.com/p/34924821 (四)推文 支持向量机原理(一) 线性支持向量机 ...

  10. 为什么Python适合初学者,一般要学习多久

    为什么Python适合初学者?一般Python要学习多久?很多人都觉得,Python是一门很好学的语言,非常适合入门.但更多人都是不清楚具体原因的.那么,我们不如一起来看看Python为何更适合初学者 ...