zoukankan      html  css  js  c++  java
  • IHttpClientFactory笔记

    在开发的过程中,遇到过这种带Factory的对象。先不扯什么工厂类,我也不知道跟工厂类有没有关联,还没有百度。

    当需要向某特定URL地址发送HTTP请求并得到相应响应时,通常会用到HttpClient类。

    该类包含了众多有用的方法,可以满足绝大多数的需求。但是如果对其使用不当时,可能会出现意想不到的事情。

    using(var client = new HttpClient())

    对象所占用资源应该确保及时被释放掉,但是,对于网络连接而言,这是错误的。

    原因有二,

    1:网络连接是需要耗费一定时间的,频繁开启与关闭连接,性能会受影响

    2:开启网络连接时会占用底层socket资源,但在HttpClient调用其本身的Dispose方法时,并不能立刻释放该资源,这意味着你的程序可能会因为耗尽连接资源而产生预期之外的异常。

    所以比较好的解决方法是延长HttpClient对象的使用寿命,比如对其建一个静态的对象

    private static HttpClient Client = new HttpClient();

    但从程序员的角度来看,这样的代码或许不够优雅。

    所以在.NET Core 2.1中引入了新的HttpClientFactory类。

    它的用法很简单,首先是对其进行IoC的注册

    1 public void ConfigureServices(IServiceCollection services)
    2 {
    3     services.AddHttpClient();
    4     services.AddMvc();
    5 }

    然后通过IHttpClientFactory创建一个HttpClient对象,之后的操作如旧,但不需要担心其内部资源的释放:

    public class LzzDemoController : Controller
    {
        IHttpClientFactory _httpClientFactory;
    
        public LzzDemoController(IHttpClientFactory httpClientFactory)
        {
            _httpClientFactory = httpClientFactory;
        }
    
        public IActionResult Index()
        {
            var client = _httpClientFactory.CreateClient();
            var result = client.GetStringAsync("http://myurl/");
            return View();
        }
    }

    直达原文

  • 相关阅读:
    通过SQLServer的数据库邮件来发送邮件
    sql生成数据库的序列号
    存储过程备份数据库
    LED客显的类
    坦克大战java版
    连连看java版
    贪吃蛇java版
    分享插件 javascript
    js实现上传图片及时预览
    json返回date类型转为字符串
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/12915278.html
Copyright © 2011-2022 走看看