首页 > 编程语言 >.NET(C#) HttpClient单例(Singleton)和每次请求new HttpClient对比

.NET(C#) HttpClient单例(Singleton)和每次请求new HttpClient对比

时间:2023-03-06 10:44:51浏览次数:40  
标签:Singleton 请求 C# 实例 单例 new string HttpClient

本文主要介绍.NET(C#)中,使用HttpClient执行求时,每次请求都执行new HttpClient创建一个实例和每次请求都使用同一个HttpClient(单例Singleton)分比区别。

 

1、每次请求创建HttpClient实例

public HttpClient GetConnection(int timeout,string baseAddress)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.BaseAddress = new Uri(baseAddress); 
            httpClient.Timeout = System.TimeSpan.FromMilliseconds(timeout);

            return httpClient;
        }

2、每次请求使用HttpClient单例

 private static readonly Lazy<HttpClient> lazy =
        new Lazy<HttpClient>(() => new HttpClient());
        public static HttpClient Instance { get { return lazy.Value; } }
        private HttpClient getConnection(int timeout,string baseAddress)
        {
            Instance.Timeout = System.TimeSpan.FromMilliseconds(timeout);
            //client.MaxResponseContentBufferSize = 500000;
            Instance.BaseAddress = new Uri(baseAddress);
            return Instance; ;
        }

 

3、对比区别

HttpClient应该只被实例化一次,并在应用程序的整个生命周期中被重用。如为每个请求实例化一个HttpClient类将耗尽沉重负载下可用的套接字数量。这将导致SocketException错误。下面是正确使用HttpClient的示例。

// HttpClient是为每个应用程序实例化一次,而不是每次请求创建一个实例
static readonly HttpClient client = new HttpClient();
static async Task Main()
{
  // 在try/catch块中调用异步网络方法来处理异常。
  try    
  {
     HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");
     response.EnsureSuccessStatusCode();
     string responseBody = await response.Content.ReadAsStringAsync();
     // string responseBody = await client.GetStringAsync(uri);
     Console.WriteLine(responseBody);
  }  
  catch(HttpRequestException e)
  {
     Console.WriteLine("\nException Caught!");    
     Console.WriteLine("Message :{0} ",e.Message);
  }
}

 

 

来自:https://www.cnblogs.com/fireicesion/p/16809600.html

 

 

 

 

 

 

 

标签:Singleton,请求,C#,实例,单例,new,string,HttpClient
From: https://www.cnblogs.com/djd66/p/17182895.html

相关文章

  • AcWing 4490. 染色题解
    题目描述样例输入:612215211111输出3算法描述思路我们以样例为例讲讲思路。如何确保dfs能顺利便利呢,我们可以使用链式前向星来存图(树)C++代......
  • MFC常用宏
    MAX_PATH  是C语言运行时库中通过#define指令定义的一个宏常量,它定义了编译器所支持的最长全路径名的长度TCHARch[MAX_PATH]={0};      ......
  • C经典 进制转换
    一、进制1.十六进制转十进制如:31=1*16^0+3*16^1=492.八进制转十进制如22=2*8^0+2*8^1=183.二进制转十进制如00110011=1*2^0+1*2^1+0*2^2+0*2......
  • ASP.NET Core - 配置系统之配置添加
    2.配置添加配置系统可以读取到配置文件中的信息,那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到ASP.NETCore入口文件中,builder(WebApplicationBui......
  • AcWing 4495. 数组操作题解
    思路此题较为简单,简述一下思路。从小到大排序,每次选取最小值,只要不为0即可每次都为序列减去一个数字太慢,但每个数又减去的数字一样,所以可以用minus记录每个数要减去的数......
  • C# 获取一个目录下的所有文件和文件夹的集合
    usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;//文件夹列表privatestaticList<string>DirectorysList=newList<str......
  • dell 5090装centos
    真实机安装完centos7版本后,会发现没有网卡,只有lo口。这是因为有些真实机安装了centos系统后没有网卡驱动。需要我们去网上下载一个linux版本的驱动包来安装。先查看我的网......
  • centos7离线部署ansible并通过ansible批量修改用户密码
    centos7离线部署ansible并通过ansible批量修改用户密码找台可以联网的机器下载好程序包,上传到对应主机mkdir/app/ansible-p#下载bzip2yuminstall-ybzip2--downlo......
  • Winfrom/CSharp中获取当前时间戳字符串、存储Sqlite数据库、时间戳转换与比较大小
    场景Winform中操作Sqlite数据增删改查、程序启动时执行创建表初始化操作:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/129322345在上面Winform中操作Sql......
  • c语言中有符号和无符号数字
    https://nju-projectn.github.io/ics-pa-gitbook/ics2022/why.html#数组求和数组求和intsum(inta[],unsignedlen){inti,sum=0;for(i=0;i<=len-1;i++)......