C#async/await心得
结论:
- 异步方法的方法签名要加 async,否则就算返回
Task<T>
也是普通方法。 - 调用异步方法,可以加 await 或不加 await
- 不加 await 得到的是
Task<T>
对象,得等异步执行完成,才能拿到T对象(废话:)。当前方法签名不必有 async。 - 加 await 得到的是 T 对象。当前方法自身会马上返回,被调用方法异步执行完成后再把T对象返回给当前方法,继续往下执行当前方法的剩余代码。当前方法签名必须有 async。
- 不加 await 得到的是
- async 方法中执行到第1个await前。是主线程执行的(同步执行的),第1个await后代码是新线程执行的(异步执行的)。如果被调用的异步方法内部也调用其它的异步方法,也是这样的执行规则。即递归作用。
- 如果await中循环中,则是第1次执行到await代码。
- Task.Wait()方法会在当前线程等待指定的task线程结束后再返回。并可以通过 Task.Result获取结果。
(本文 2019-7首发,2023-3作了修改,对容易误解之处作了展开说明)
博主简介:佘焕敏(shé),洋名 Billy Sir。
关注编程基础技术,并致力于研究软件的自动化生成。 对编程规范化、面向对象的极致使用也有着浓厚的兴趣。 同时非常希望能够写程序到65岁。
只有工匠精神,才能把常人觉得单调乏味的代码,当作作品雕刻成艺术品。
重点:这里几乎每一篇文章,都是我认真创作的,凝结了心血。写作从来都不是一件容易的事,对从小语文不好的我而言,是难上加难。而且,你发现没有,文中没有广告。这篇文章介绍了为什么要写这些文章。
![微信赞赏码](https://img2022.cnblogs.com/blog/33556/202211/33556-20221101085333455-1717538163.png)