.NET学习笔记
文章平均质量分 75
C丶C魔女想睡觉
菜鸟一枚
展开
-
C# Autofac学习笔记
一、为什么使用 Autofac?Autofac 是. NET 领域最为流行的 IoC 框架之一,传说是速度最快的一个。1.1、性能有人专门做了测试:1.2、优点1)与 C# 语言联系很紧密。C# 里的很多编程方式都可以为 Autofac 使用,例如可以使用 Lambda 表达式注册组件。2)较低的学习曲线。学习它非常的简单,只要你理解了 IoC 和 DI 的概念以及在何时需要使用它们。3)支持 JSON/XML 配置。4)自动装配。5)与 Asp.Net MVC 集成。转载 2022-04-28 15:40:56 · 727 阅读 · 0 评论 -
Task.CompletedTask和Task.Result小记
在任何返回Task的方法中,如果可以在不进行异步的情况下计算结果,则最好避免使用Task.Run。例如,一个简短的计算函数,或者测试中返回了一个预先计算过的结果,则无需使用Task.Run。例如,定义了一个返回Task的接口方法,但是在实现中,并没有特别耗时的代码public interface IComputer { Task Do(); Task<string> DoString();}一般我们会这样实现。即使实现中代码很简短。..转载 2021-03-11 14:53:01 · 537 阅读 · 0 评论 -
Task.Yield()和Task.CompletedTask有什么不同
有时候我们在代码中要执行一些非常耗时的操作,我们不希望这些操作阻塞调用线程(主线程)的执行,因为调用线程(主线程)可能还有更重要的工作要做,我们希望将这些非常耗时的操作由另外一个线程去执行,这个时候就可以用到await Task.Yield(),它借助了C# 5.0中的异步函数关键字await async,将await关键字之后的代码交由线程池中的另一个线程执行(前提是项目的SynchronizationContext.Current为null)。那么有同学可能会纳闷,await Task.Yield(转载 2021-03-11 14:32:42 · 3282 阅读 · 0 评论 -
理解ValueTask和ValueTask<TResult>
本文译自微软开发博客《Understanding the Whys, Whats, and Whens of ValueTask》一文,仅在知乎平台发布。转载请注明原文链接、本文链接和译者(知乎用户@叶影)。 本文不是对原文内容的严格翻译,例如会适当略过一些背景介绍的段落、无关紧要的片段、过渡性的语句;此外还会在尽可能保证理解正确的基础上意译部分内容,如有不当,希望读者不吝赐教。 原文评论区有一些精彩的读者提问和作者回答(比如文末话题的进一步深入:“IAsycEnumerable异步完成的场景下为什..转载 2021-03-11 14:17:29 · 728 阅读 · 0 评论 -
在.NET Core中使用Channel(三)——理解反压力(Understanding Back Pressure)
到目前为止,我们一直在使用所谓的“Unbounded”通道。你会注意到,当我们创建通道时,我们这样做:var myChannel = Channel.CreateUnbounded<int>();但实际上,我们可以这样做:var myChannel = Channel.CreateBounded<int>(1000);这与创建容量有限的列表或数组等其他集合类型并无太大差别。在我们的示例中,我们创建了一个最多容纳1000项的Channel。但为什么要限制自己呢?这就翻译 2021-03-09 14:31:12 · 635 阅读 · 0 评论 -
在.NET Core中使用Channel(二)——高级用法
在我们之前的文章中,看了一些非常简单的例子来说明Channel是如何工作的,我们看到了一些非常漂亮的特性,但大多数情况下它与其他某某Queue实现非常相似。让我们进入一些更高级的话题。我说的是高级,但其中很多都非常简单。读/写分离如果你曾经在两个类之间共享队列,你就会知道任何一个类都可以读/写,即使它们本不应该这样做。例如:class MyProducer{ private readonly Queue<int> _queue; public MyProd翻译 2021-03-09 14:23:48 · 970 阅读 · 0 评论 -
在.NET Core中使用Channel(一)——初步了解
我最近一直在熟悉.net Core中引入的新Channel<T>类型。我想在它第一次发布的时候我了解过它,但是有关文章非常非常少,我不能理解它们与其他队列有什么不同。在使用了一段时间后,我终于看到了它们的吸引力和真正的力量。最值得注意的是大型异步后台操作,这些操作几乎需要双向通信来同步它们正在做的事情。这句话有点拗口,但希望在本系列文章结束时,你会清楚什么时候应该使用Channel<T>,什么时候应该使用一些更基本的东西,比如Queue<T>。Channel是什翻译 2021-03-09 14:13:24 · 1186 阅读 · 0 评论 -
C#表达式目录树二
文章目录一个需求的探讨表达式目录树的解析通过表达式目录树构造sql表达式的链接一个需求的探讨我们平时封装的数据库查询方法Find<T>(int id)我们都把条件定死了,而不是动态的查询条件,不是不写,而是实现不了,写不出来,因为一个表的字段可能是Id,name等等不同的字段,而字段的值也可能是int,string,datetime等不同的数据类型,而操作符又可能是大于,小于,等于,包含这些,更有可能条件是一个条件,两个条件,三个条件等等,这些导致了我们没法写一个通用find封装,而只能根据原创 2020-07-29 11:59:15 · 406 阅读 · 1 评论 -
C#表达式目录树一
文章目录什么是表达式目录树Expression表达式目录树的本质表达式目录树的拼装拼装示例一拼装示例二拼装示例三什么是表达式目录树Expression表达式目录树的本质以前我们写Linq查询条件像这样: new List<int>().Where(i => i > 10);我们AsQueryable()一下: new List<int>().AsQueryable().Where(i => i > 10);我们查看AsQueryable的w原创 2020-07-27 17:29:00 · 1085 阅读 · 0 评论 -
c#linq
文章目录扩展方法linq的简单演化Linq To Object常见的使用示例Linq To SQL总结扩展方法扩展方法的具体定义我就不写自行去搜索,我简单说一下扩展方法,定义一个扩展方法就在一个静态类中,定义一个静态方法,方法的第一个参数就是你需要扩展类型,之后你可以可以在这个类型的实例直接调用这个方法:比如我们为string增加一个截断的如果超过多长就截取后面加…的扩展方法。 public static class ExtendMethod { public static s原创 2020-07-22 17:45:14 · 186 阅读 · 0 评论 -
C#Lambda表达式
文章目录Lambda表达式lambda表达式的演化lambda多播委托Lambda表达式说起lambda表达式,其实本质就是匿名函数一种效简化代码,一种方便的写法。下面我们通过代码的演化来增强对lamdaba表达式的理解。lambda表达式的演化在.NetFramework1.0我们的委托实例是这么写的:public delegate void NoReturnNoPara(); //.NetFramework1.0 1.1NoReturnNoPara method = new NoRet原创 2020-07-22 17:00:07 · 608 阅读 · 0 评论 -
C#委托和事件
文章目录泛型委托Action/Func基本介绍Action/Func的使用Action/Func的意义委托的多种途径实例化多播委托多播委托的作用事件委托与事件的区别和联系winform里的事件自定义事件实现流程演示观察者模式(额外)泛型委托上一章我们介绍了什么是委托、委托的基本使用一级委托的意义。但在实际使用过程中我们很少自定义委托,以为官方框架为我们提供了两个内置的委托Action和Func通过这个l内置的委托基本上可以实现所有的需求,而不需要再自定义委托,而且官方提供这种封装,自然就是希望大家都统一原创 2020-07-21 17:31:15 · 250 阅读 · 0 评论 -
C#委托详解
文章目录什么是委托委托的基本使用委托的作用与意义示例什么是委托我们平时的开发过程中就会发现委托无处不在,例如:Func,Action,异步多线程,事件这些都用到了委托。从Framework1.0开始,委托就已经无处不在。那委托到底是什么呢,其实委托的本质就是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递在方法重载的上下文中,方法的签名不包括返回值在委托的上下文中,方法的签名是包含返回值的委托(delegate)的声明的语法如下:public delegate v原创 2020-07-16 11:54:57 · 530 阅读 · 0 评论 -
C#特性详解二
文章目录特性提供额外的信息特性封装提供额外行为Validate验证特性提供额外的信息编写一个示例,演示特性是怎么提供额外的信息的。我们经常用到枚举enum,我们常有一个需求就是我们通过枚举可以轻易获取到属性的字符串名称或者响应数字,但是一般我们做数据展示的时候不想展示属性名称而是想用一个中文描述或者其它什么的。下面我们的示例就是怎么实现这个需求。首先我么先自定义一个特性类RemarkAttribute: /// <summary> /// Remark特性 /// &l原创 2020-07-15 16:38:59 · 271 阅读 · 0 评论 -
C#特性详解一
文章目录特性无处不在特性的本质自定义特性基本语法和使用自定义特性操作特性怎么产生价值特性无处不在EF–MVC–WCF–Webservice–UnitTest–IOC–AOP–SuperSocket[Obsolete]编译时就有提示 影响了编译器[Serializable]对象就可以序列化 影响了程序运行特性的本质特性就是一个类,直接继承/间接继承自Attribute父类约定俗成用Attribute结尾,标记时就可以省略掉自定义特性基本语法和使用自定义特性类(自定义特需要继承At原创 2020-07-14 15:55:59 · 830 阅读 · 0 评论