异步一些知识

1、await调用的等待期间,.NET会把当前的线程返回给线程池,等异步方法调用执行完毕后,框架会从线程池再取出来一个线程执行后续的代码。

2、异步方法中的代码并不会自动在新线程中执行,除非把代码放到新线程中执行。

3、async方法缺点:
<1>异步方法会生成一个类(状态机),运行效率没有普通方法高;
<2>可能会占用非常多的线程;

4、只甩手Task,不“拆完了再装”
反编译上面的代码:只是普通的方法调用。
优点:运行效率更高,不会造成线程浪费。

5、返回值为Task的不一定都要标注async,标注async只是让我们可以更方便的await而已。

6、如果一个异步方法只是对别的异步方法调用的转发,并没有太多复杂的逻辑(比如等待A的结果,再调用B;把A调用的返回值拿到内部做一些处理再返回),那么就可以去掉async关键字。

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

8、异步与yield:(看一看)
复习: yield return不仅能够简化数据的返回,而且可以让数据处理“流水线化”,提升性能。
static IEnumerable Test()
{
yield return “hello”;
yield return “lily”;
yield return “aoteman”;
}

9、在旧版C#中,async方法中不能用yield。从C# 8.0 开始,把返回值声明为IAsyncEnumerable(不要带Task),然后遍历的时候用await foreach()即可。
static async Task Main(string[] args)
{
await foreach(var s in Test())
{
Console.WriteLine(s);
}
}
static async IAsyncEnumerable Test()
{
yield return “hello”;
yield return “lily”;
yield return “aoteman”;
}

10、SynchronizationContext,ConfigureAwait(false)等。不要同步、异步混用。
backgroundworker

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值