异步编程的其他问题以及委托

    • WhenAll

Task类里的相关方法,一个是 WhenAll,一个是 WhenAny,他们都接受多个 Task 作为参数,还有一个是 FromResult。

WhenAny 是给定多个 Task 参数中,只要有一个完成,Task 就完成。相当于一份复合的 Task。

WhenAll 是给定的多个 Task 中参数中,所有的参数都完成, Task 才算完成。

FromResult创建普通数值的 Task 对象。把普通数值转换为 Task 的形式。一般用于异步方法但又没证明 Async 的情况下,来返回值,需要用 FromResult。

    • 适用情景

当多个线程同时执行,又不要求执行顺序的时候,可以用 WhenAll 。

    • 接口中的异步方法

asyc 提示编译器为异步方法中的 await 代码进行分段处理。而一个方法是否声明了 async 对调用者没有区别,因此对接口中的方法或者抽象方法不能修饰为 asyc。

    • 异步与 yield

yield 不仅能够简化数据的返回,而且可以让数据处理“流水线化”,提升性能。

yield return "hello";

相当于返回一个集合,里面有3个元素。用这个语法让写的代码更简单。

async 方法中不能使用 yield,从 C# 8.0 开始,把返回值声明为 IAsyncEnumerable(不要带 Task ),遍历的时候用 await foreach() 即可。

不要同步方法和异步方法混用,尽量能用异步就用异步方法。

    • 委托

委托是可以指向方法的类型,调用委托变量时执行的就是变量指向的方法。

.Net 中定义了泛型委托 Action(无返回值) 和 Func(有返回值),所以一般不用自定义委托类型。

声明委托的时候,参数的名字和类型在对应的方法里面要一致。

自定义:

泛型委托:

委托变量不仅可以指向普通方法,还可以指向匿名方法

匿名方法也可以写成 lambda 表达式的形式:

=>在英文里面读作 goes to

在 lambda 表达式里面,可以在定义方法变量类型的时候把方法内的参数类型省略

如果委托没有返回值,且方法体只有一行代码,可以省略{}

如果委托有返回值,且方法体只有一行代码,可以省略return 和{}

如果只有一个参数,参数的 () 也可以省略

把 lambda表达式反推为匿名方法的写法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值