Day01 .net学习总结

学习的是杨中科,记录一下途中觉得比较重要的

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扩展方法

筛选类

  1. Where:根据指定条件筛选序列中的元素。
  2. OfType:根据指定类型筛选序列中的元素。

投影类

  1. Select:将序列中的每个元素投影到一个新的形式。
  2. SelectMany:将序列中的每个元素投影到一个 IEnumerable<T> 并将结果合并为一个序列。

排序类

  1. OrderBy:按升序对序列中的元素进行排序。
  2. OrderByDescending:按降序对序列中的元素进行排序。
  3. ThenBy:在已排序的序列上按升序进一步排序。
  4. ThenByDescending:在已排序的序列上按降序进一步排序。
  5. Reverse:反转序列中元素的顺序。

分组类

  1. GroupBy:根据指定的键对序列中的元素进行分组。
  2. ToLookup:根据指定的键对序列中的元素进行分组,并将结果存储在一个 ILookup<TKey, TElement> 中。

连接类

  1. Join:基于键相等的条件将两个序列的元素进行关联。
  2. GroupJoin:基于键相等的条件将两个序列的元素进行关联,并对每个元素组进行分组。

聚合类

  1. Count:返回序列中的元素数量。
  2. LongCount:返回序列中的元素数量(以 long 类型表示)。
  3. Sum:计算序列中元素的总和。
  4. Average:计算序列中元素的平均值。
  5. Min:返回序列中的最小值。
  6. Max:返回序列中的最大值。
  7. Aggregate:对序列中的元素进行自定义聚合操作。

元素操作类

  1. First:返回序列中的第一个元素,如果序列为空则抛出异常。
  2. FirstOrDefault:返回序列中的第一个元素,如果序列为空则返回默认值。
  3. Last:返回序列中的最后一个元素,如果序列为空则抛出异常。
  4. LastOrDefault:返回序列中的最后一个元素,如果序列为空则返回默认值。
  5. Single:返回序列中唯一的元素,如果序列中元素数量不为 1 则抛出异常。
  6. SingleOrDefault:返回序列中唯一的元素,如果序列为空则返回默认值,如果序列中元素数量超过 1 则抛出异常。
  7. ElementAt:返回序列中指定索引处的元素。
  8. ElementAtOrDefault:返回序列中指定索引处的元素,如果索引超出范围则返回默认值。

集合操作类

  1. Distinct:返回序列中不同的元素。
  2. Union:返回两个序列的并集。
  3. Intersect:返回两个序列的交集。
  4. Except:返回存在于第一个序列但不存在于第二个序列的元素。
  5. Concat:将两个序列连接成一个序列。

分页和限制类

  1. Skip:跳过序列中指定数量的元素。
  2. Take:从序列开头获取指定数量的元素,可结合Skip,从第几个元素开始取自定义个元素。
  3. SkipWhile:只要满足指定条件,就跳过序列中的元素。
  4. TakeWhile:只要满足指定条件,就从序列开头获取元素。

特殊例子:随机排序

在年龄相同情况下按工资排序(尾部加Thenby)

groupby用法:

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

今天先到这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值