.net
文章平均质量分 52
Bear Coding
这个作者很懒,什么都没留下…
展开
-
C# 自定义常用的代码片段
配置路径:工具=》代码片段管理器=》语言选择CSharp 和 VisualC#;就能看到代码片段的配置文件夹。可以复制一个到桌面来作为模板修改。配置路径:左上角=》文件=》首选项=》配置用户代码片段;在拉下框中选择csharp就会自动生成代码片段配置文件。class_ctor.snippet 带构造函数的class代码块。class.snippet 已经有默认的了,不过可以替换掉。原创 2023-03-03 17:22:46 · 547 阅读 · 0 评论 -
C# 使用foreach遍历自己的实现类(迭代器)
要使用foreach的类需要实现方法:IEnumerator GetEnumerator()以下使用“T泛型=int”类型来实现一个迭代,也可以改成泛型的迭代器。原创 2023-01-03 11:49:08 · 648 阅读 · 0 评论 -
C# async函数慎用void返回值,小心被开除
假如你写了类似以下的代码,那你得小心了, 他有可能会使得你整个程序崩溃,除非你用try catch将整个函数保护起来。 private async void Test() { using DbController controller= new DbController(); var re = await controller.GetRecordsAsync(8888); throw new Exce原创 2021-12-30 10:41:08 · 2291 阅读 · 0 评论 -
C# 全局捕获async的异常
在调用异步函数的时候,如果不await等待,异步函数里面出现异常我们也不知道, 除非将整个函数try catch。但我们一般也不会这样做。假如出现了未观察到的异常怎么办呢。以下代码出现异常是捕获不到的: private async Task Test() { using DbController controller= new DbController(); var re = await controller.GetRe原创 2021-12-30 10:21:37 · 2129 阅读 · 0 评论 -
.Net Core微服务使用SkyWalking实现链路监控
SkyWalking是基于Java开发的,对Asp.net Core支持比较完善,且使用简单,代码量少。SkyWalking的几个重要组成部分:1、Agent:客户端,用于发送链路数据;2、Collector:服务端,用于收集链路数据,并持久化;SkyWalking-APM3、Storage:存储段,用于存储链路数据;(mysql / h2 / es)4、UI:用于展示链路数据(java web)...原创 2020-09-15 14:17:24 · 2732 阅读 · 0 评论 -
.Net Core 使用CAP框架实现异步化分布式事务
CAP是一款基于.net标准的库,该库是处理分布式事务的解决方案;它具有轻量级的、开源、易于使用、具有EventBus(事件总线)功能、持久化等特点。官方中文文档:https://cap.dotnetcore.xyz/user-guide/zh/getting-started/quick-start/基础核心Nuget包:DotNetCore.CAPEventBus(事件总线)Nuget包:DotNetCore.CAP.RabbitMQ、DotNetCore.CAP.Kafka、DotNetCore原创 2020-09-10 11:32:14 · 6830 阅读 · 0 评论 -
.Net Core 微服务使用Polly实现熔断、降级、超时、重试
说明:1、Polly官网:http://www.thepollyproject.org/2、Polly安装:Nuget Microsoft.Extensions.Http.Polly熔断:熔断开启之后,在熔断过程中将不再发送http请求,而是直接抛异常出来。等到熔断被自动关闭后再正常请求。降级:熔断开启之后会抛出异常,降级机制则会捕获异常,然后可以进行自定义处理异常。超时:Http请求的超时时间。重试:Http请求失败后的重试,可以重试N次。一、基本使用1、在Startup.原创 2020-08-19 11:32:56 · 4928 阅读 · 2 评论 -
三种常用的负载均衡算法C#(随机、轮询、权重)
入参实体: internal class ServiceCenterModel { public string Url { get; set; } public string[] ServiceTags { get; set; } }1、随机 /// <summary> /// 随机 /// </summary> internal class RandomAlgorithm {原创 2020-08-17 11:49:21 · 3766 阅读 · 0 评论 -
C#线程锁(自旋锁SpinLock、互斥锁Mutex、混合锁Monitor | lock)
一、自旋锁自旋锁是指当一个线程在获取锁对象的时候,如果锁已经被其它线程获取,那么这个线程将会循环等待,不断的去获取锁,直到获取到了锁。适合于原子操作时间非常短的场景优点:避免了线程上下文切换。性能较高。缺点:如果长时间等待,将消耗大量的CPU资源。而且多个等待中的线程,并不是等待时间越长就先获取到锁,有可能会一直等待下去。两种实现方式如下:实现代码一:private static int _SpinLock = 0;//锁对象private static int incrValu原创 2020-06-15 09:35:13 · 7189 阅读 · 0 评论 -
修改NuGet包缓存位置
NuGet包太大了,占用了大量的C盘空间。将他们迁移到D盘去才好呀。NuGet包默认缓存位置:C:\Users\{username}\.nuget\packages本地包的默认位置:C:\Program Files (x86)\Microsoft SDKs\NuGetPackages //使用VS 工具 选项 Nuget包管理器 这里面也可以看到配置文件地址:C:\Program Files (x86)\NuGet\Config 1、修改本地包的默认位置将C:\Progra...原创 2020-06-11 14:18:40 · 7445 阅读 · 0 评论 -
.Net Core DI依赖注入:一个接口注入多个实现类
方式一、默认就可以注入多个实现类例如接口IShow,注入ShowA和ShowB两个实现类:services.AddTransient<IShow, ShowA>();services.AddTransient<IShow, ShowB>();获取的时候默认是获取到最后一个,如下所示:可以使用"IEnumerable<IShow> showList" 的方式来获取所有注入的实现类,如下所示:方式二、使用注入方法”AddTransient&l.原创 2020-05-21 10:56:02 · 5199 阅读 · 2 评论 -
EF Core 3.1 DB First的使用
一、DB First二、Code First三、Model First原创 2020-05-20 09:17:27 · 2286 阅读 · 0 评论 -
Lock(this)的可行性研究
首先要知道this指的是当前实例。比如Demo demo=new Demo(); 那么this指的就是demo这个实例,所以new 多次是会产生多个this的。而我们知道Lock必须锁住同一个对象实例,且该实例不发生改变。那么如果在单例的情况下使用this行不行呢, 答案是可以的。接下来看看非单例和单例下的运行结果。...原创 2020-05-18 15:07:58 · 1820 阅读 · 0 评论 -
.Net Core GDI+ 在docker环境中找不到dll
场景:在.Net Core 2.1项目中使用BitMap画图 , 在windows服务器下没问题,但发布到linux下的Docker容器中会报错。在dockerfile文件中加入以下代码,或者创建好docker 容器之后进入容器,执行以下操作。 RUN ln -s /lib/x86_64-linux-gnu/libdl-2.24.so /lib/x86_64-linux-gnu/lib...原创 2020-04-29 16:15:42 · 1915 阅读 · 0 评论 -
C# 多线程的几种操作方式(异步委托、Thread、ThreadPool、Task【async/await】)
多线程主要多个任务并发执行,可以异步执行任务,提高响应速度,不阻塞当前线程(如C/S窗口)。使用异步来调用以下代码: //用于委托调用 private void DoSomething(string name) { Console.WriteLine($"DoSomething被调用 {name}"); }一、委托异步调用...原创 2020-04-28 15:15:04 · 6081 阅读 · 0 评论 -
EF(EFCore)性能优化与高级用法
1原创 2020-05-18 11:48:13 · 9682 阅读 · 0 评论 -
设计模式之装饰器模式(五)
装饰器模式可以在不修改原有代码的情况下给它增加一个或多个顺序可变的扩展功能,且不破环原有代码的封装性,使用了OOP的组合+继承的方式来实现,是一种AOP编程思想的设计模式。现有如下代码: //学生基类 public abstract class StudentBase { public string name { get; set; } ...原创 2020-01-19 14:30:59 · 1703 阅读 · 0 评论 -
.net core 3.1使用swagger生成接口文档
1、安装Nuget依赖包Install-Package Swashbuckle.AspNetCore -Version 5.0.0-rc42、配置Startuppublic void ConfigureServices(IServiceCollection services){ services.AddSwaggerGen(options =...原创 2020-01-14 15:09:10 · 4115 阅读 · 0 评论 -
C#多文件夹压缩
说明:依赖于ICSharpCode.SharpZipLib.dll1、直接上代码了(仅作参考) /// <summary> /// 调用压缩文件 /// </summary> /// <returns></returns> public ActionResult...原创 2017-12-17 09:59:25 · 4084 阅读 · 2 评论 -
设计模式之简单工厂(一)
设计模式用于解决软件开发过程中所遇到的问题,大致归纳为23种设计模式;设计模式没有固定的使用方式。完全可以根据自己的需要进行相应的修改,也可以多个设计模式合作使用。不必拘泥于现有的解决方式。在学习设计模式之前可以先简单看看六大设计原则。简单工厂的优点在于内部包含了必要的逻辑判断,根据客户端的选择动态的实例化相关的类,对于客户端而言去除了于具体产品的依赖;但是如果需要拓展新的逻辑则必须修改逻辑判...原创 2019-03-15 11:18:45 · 2761 阅读 · 0 评论 -
设计模式之工厂方法(二)
工厂方法定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。简单工厂vs工厂方法:简单工厂最大的优点在于工厂类包含了必要的逻辑判断,根据客户端的选择条件动态的实例化相关的类,对于客户端而言,去除了与具体产品的依赖。工厂方法实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在,也就是说,工厂方法把简单工厂的内部逻辑移到了客户端代...原创 2019-03-15 11:38:52 · 2733 阅读 · 0 评论 -
设计模式之抽象工厂(三)
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 //用户信息 public interface IUser { void InsertUser(); void GetUserInfo(); } //用户信息MySql public class User_MySql : IUser ...原创 2019-03-15 14:47:25 · 2707 阅读 · 0 评论 -
C# 插入排序、选择排序、冒泡排序
一、插入排序 调用方式 List<int> y = InsertionSort<int>(i, (a, b) => { return a < b; }); int[] z = InsertionSort<int>(m, (a, b) => { return a < b; }); ...原创 2019-03-13 15:28:04 · 2932 阅读 · 2 评论 -
Docker部署asp.net Core项目
1、将项目发布2、在linux系统中创建文件夹/opt/site/,并将项目放置文件夹下面。3、创建dockerfile文件也放置在/opt/site/目录下面FROM microsoft/dotnet:2.1-aspnetcore-runtimeCOPY ./coreTest /appWORKDIR /appEXPOSE 9099CMD ["dotnet", "...原创 2019-03-18 22:14:23 · 3607 阅读 · 0 评论 -
.net Core Jwt登录验证刷新Token
使用 jwt做登录验证的时候,token的过期时间的固定的, 也就是只要经过了一定的时间肯定会过期。有可能用户用着系统就突然提示登录失效了。这里通过在行为结果过滤器Result Filter中刷新Token。例如设置token失效时间为20分钟, 那么只要用户在20分钟之内没有访问后台接口,token将失效。代码只是个范例,不严谨。小伙伴们自己修改吧!别报空引用哦~~~ public c...原创 2019-07-18 17:10:11 · 7597 阅读 · 0 评论 -
设计模式之模板方法(四)
最近做了一个微信模板消息推送的功能,正好用到了模板方法设计模式;在微信模板消息推送功能中。除了各个微信模板之间的内容(模板参数)不同之外,其它的逻辑是一样的。使用模板方法设计模式之后,如果要新增、修改或删除微信模板的时候只需要编辑对应的模板实现类。不会影响其它模板功能。代码都是删减过的,只是提供一个范例。1、模板抽象类 public abstract class Template...原创 2019-08-09 11:42:54 · 2194 阅读 · 0 评论 -
C#WindowsService服务
C#开发Window服务一、 新建Window服务项目二、 添加安装程序三、 配置服务属性四、 编写定时器代码publicpartialclassService1 : ServiceBase{ publicService1() { InitializeComponent...原创 2018-07-10 09:14:53 · 5083 阅读 · 0 评论