学习的是杨中科,记录一下途中觉得比较重要的
async与await使用
异步编程的比较结合现实概念:假如你到餐厅吃饭,如果点餐不是以异步思想,那么传统思想就是服务员要站到你旁边,直到你点完餐才离开,然后提交订单给后厨;但以异步的思想,就是服务员将菜单给你上面自己打勾,服务员自己去管理其他顾客去了。直到你打完勾之后,你才叫服务员过来。期间服务员的效率就大大提高,避免了等待你点餐的时间,但是如果餐厅里只有你一个人,那么效率跟传统方法效率就没有区别。
当方法体中有await,方法名返回类型前一定要使用async,并且返回类型必须是Task。
await作用:是指在等待await后的语句完成前,将线程收到线程池中,然后等await后的语句完成后,才将线程分配到接下来的语句运行。其中线程是否切换取决于await语句的执行时间。
异步方法不一定都要用async修饰,若方法里返回task类型值(Task.Result(结果)来return),在调用该异步方法时候再输入await接受它的返回值,那么就方法内无需用async修饰。
比如下图:

当想要给异步设置等待时间,应该用await Task.Delay而避免用Thread.Sleep.因为Thread会阻塞调用线程,导致web服务器大大下降并发
CancellationToken使用(三种方式,暂时知道功能,具体写法以后巩固)
作用:当用户申请取消或者规定时间超时时,服务器取消加载该请求。先记录杨老师给的示例。


WhenAll
作用:配合await当括号里所有执行之后,才往下执行(图片来自杨中科老师B站教学)

另一种写法whenall(Task数组):将数组中的任务一起完成

接口中的方法不要标记async,等到类实现了接口再实现里面的方法时候,再到这实现类里加async。
Action:存储无返回值方法

Func存储有返回值方法,<>中最后一位为返回值类型

LINQ表达式小练习:筛选大于等于10

这里的Where也可以自己手写,杨老师示例图:

LINQ扩展方法
筛选类
- Where:根据指定条件筛选序列中的元素。
- OfType:根据指定类型筛选序列中的元素。
投影类
- Select:将序列中的每个元素投影到一个新的形式。
- SelectMany:将序列中的每个元素投影到一个
IEnumerable<T>并将结果合并为一个序列。
排序类
- OrderBy:按升序对序列中的元素进行排序。
- OrderByDescending:按降序对序列中的元素进行排序。
- ThenBy:在已排序的序列上按升序进一步排序。
- ThenByDescending:在已排序的序列上按降序进一步排序。
- Reverse:反转序列中元素的顺序。
分组类
- GroupBy:根据指定的键对序列中的元素进行分组。
- ToLookup:根据指定的键对序列中的元素进行分组,并将结果存储在一个
ILookup<TKey, TElement>中。
连接类
- Join:基于键相等的条件将两个序列的元素进行关联。
- GroupJoin:基于键相等的条件将两个序列的元素进行关联,并对每个元素组进行分组。
聚合类
- Count:返回序列中的元素数量。
- LongCount:返回序列中的元素数量(以
long类型表示)。 - Sum:计算序列中元素的总和。
- Average:计算序列中元素的平均值。
- Min:返回序列中的最小值。
- Max:返回序列中的最大值。
- Aggregate:对序列中的元素进行自定义聚合操作。
元素操作类
- First:返回序列中的第一个元素,如果序列为空则抛出异常。
- FirstOrDefault:返回序列中的第一个元素,如果序列为空则返回默认值。
- Last:返回序列中的最后一个元素,如果序列为空则抛出异常。
- LastOrDefault:返回序列中的最后一个元素,如果序列为空则返回默认值。
- Single:返回序列中唯一的元素,如果序列中元素数量不为 1 则抛出异常。
- SingleOrDefault:返回序列中唯一的元素,如果序列为空则返回默认值,如果序列中元素数量超过 1 则抛出异常。
- ElementAt:返回序列中指定索引处的元素。
- ElementAtOrDefault:返回序列中指定索引处的元素,如果索引超出范围则返回默认值。
集合操作类
- Distinct:返回序列中不同的元素。
- Union:返回两个序列的并集。
- Intersect:返回两个序列的交集。
- Except:返回存在于第一个序列但不存在于第二个序列的元素。
- Concat:将两个序列连接成一个序列。
分页和限制类
- Skip:跳过序列中指定数量的元素。
- Take:从序列开头获取指定数量的元素,可结合Skip,从第几个元素开始取自定义个元素。
- SkipWhile:只要满足指定条件,就跳过序列中的元素。
- TakeWhile:只要满足指定条件,就从序列开头获取元素。
特殊例子:随机排序![]()
在年龄相同情况下按工资排序(尾部加Thenby)
![]()
groupby用法:

综合查询如下图:先将list按照年龄分组得到了多个组,g是以年龄为key,相同的key分为的一组,遍历每个组,并投影出它们的最大工资和最小工资以及人数

今天先到这样
180

被折叠的 条评论
为什么被折叠?



