夜鹰教程网-程序员的加油站
 当前位置:文章中心 >> Winform/客户端程序
HttpClient使用说明
夜鹰教程网 来源:www.yyjcw.com 日期:2018-1-6 23:16:25
关于微软HttpClient使用,避免踩坑

最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个支持异步编程的API的SDK框架;我在公司开发项目时,查阅了一些资料对这个Client如何使用的更合理,最大的保障就是承受高频繁的客户端发起连接和线程安全,接下来我就简要说说如何合理使用。


一、普通场景使用(算是坑了)


先看一下代码: 


复制代码

1             while (true)

2             {

3                 using (HttpClient client = new HttpClient())

4                 {

5                     var result = client.GetStringAsync("http://www.xxxxx.com").Result;

6                     Console.WriteLine($"{result} > {DateTime.Now}");

7                 }

8             }

复制代码

以上代码请求必定在持续一段时间内会报错【大家在测试url地址时希望是内部局域网络】;


有人会说这个是单线程估计没意思,我想说的是,如果你多线程里用using可能测试出来没问题,但想想线程的开启对CPU来说是一笔不小的开销,所有真正压倒api访问的频率其实不是特别高频率了;


 


二、优化场景使用


1             HttpClient client = new HttpClient();//这里的client可以用单例模式进行预先初始化

2             while (true)

3             {

4                 var result = client.GetStringAsync("http://www.xxxx.com/").Result;

5                 Console.WriteLine($"{result} > {DateTime.Now}");

6             }

而且由于里面的异步方法是线程安全的,所以不用担心多线程使用问题!


 


2017.1.5


注意了DeleteAsync在高并发情况会出现问题,大家谨慎使用


 


三、关于DNS的BUG


我觉得这个问题,不是不可以解决,如果用Nginx我觉得就能暂时解决这个换IP迁移等问题;


在InfoQ上的对HttpClient的缺陷文章:http://www.infoq.com/cn/news/2016/09/HttpClient


 


题外话:关于最佳单例模式的写法


复制代码

        private static HttpClient client;

        public static HttpClient Singleton

        {

            get

            {

                if (client == null)

                {

                    Interlocked.CompareExchange(ref client,new HttpClient(),null);

                }

                return client;

            }

        }

复制代码


复制链接 网友评论 收藏本文 关闭此页
上一条: HttpWebRequest以及HttpWebRespon…  下一条: Winform为Combobox树添加数据
夜鹰教程网成立于2008年,目前已经运营了将近 13 年,发布了大量关于 html5/css3/C#/asp.net/java/python/nodejs/mongodb/sql server/android/javascript/mysql/mvc/easyui/vue/echarts原创教程。 我们一直都在坚持的是:认证负责、一丝不苟、以工匠的精神来打磨每一套教程,让读者感受到作者的用心。我们默默投入的时间,确保每一套教程都是一件作品,而不是呆板的文字和视频! 目前我们推出在线辅导班试运营,模式为一对一辅导,教学工具为QQ。我们的辅导学科包括 java 、android原生开发、webapp开发、商城开发、C#和asp.net开发,winform和物联网开发、web前端开发,但不仅限于此。 普通班针对的是国内学员,例如想打好基础的大学生、想转行的有志青年、想深入学习的程序员、想开发软件的初学者或者业余爱好者等。 就业办针对即将毕业上岗的大四学生,或者打算转行的初级开发工程师。 留学生班针对的是在欧美、加拿大、澳洲、日本、韩国、新加坡等地留学的中国学子,目的是让大家熟练地掌握编程技能,按时完成老师布置的作业,并能顺利地通过考试。 详细咨询QQ:1416759661   夜鹰教程网  基于角色的权限管理系统(c-s/b-s)。
  夜鹰教程网  基于nodejs的聊天室开发视频教程
  夜鹰教程网  Git分布式版本管理视频教程
  夜鹰教程网  MVC+EasyUI视频教程
  夜鹰教程网  在线考试系统视频教程
  夜鹰教程网  MongoDB视频教程。
  夜鹰教程网 Canvas视频教程
  夜鹰教程网 报表开发视频教程
  热点推荐
破解封路由的方法详解
技巧篇:只用这一招就能拒绝全部的…
挂马方法和技巧大汇总
网络安全防护:如何防止远程入侵
如何解决:系统开机就弹出广告网页…
彻底防御U盘病毒
安全配置交换机端口提高网络安全性…
浅析网络安全审计原理和技术(2)
用U盘就可以去除win XP管理员密码…
电脑硬盘各逻辑盘用鼠标左键双击它…
详解网站挂马的手段
新手认识;网银账号相关知识
ARP欺骗和ICMP欺骗催生全新DOS工具…
浅析网络安全审计原理和技术(1)
木马最基本的隐藏:不可见窗体和隐…
  最近更新
.NET C# 和Java开发人员岗位切换
模拟登录人人网
HttpWebRequest以及HttpWebRespon…
HttpClient使用说明
Winform为Combobox树添加数据
C#之允许DataGridView选中整行
C#中DataGridView只能选择一行禁止…
为自动填充列调整大小期间不能执行…
c# winform设置listBox如何设置te…
c#的委托(代理)和事件
C# Task 任务计划
C# socket 多线程多管道可断点传送…
让ListBox的滚动条滚动到最底部
c#用事件模式实现通知
什么是异步编程,为什么会需要异…

关于我们 | 网站建设 | 技术辅导 | 常见问题 | 联系我们 | 友情链接

夜鹰教程网 版权所有 www.yyjcw.com All rights reserved 备案号:蜀ICP备08011740号3