Task2 关键字async和await的使用
C# 中的 async /əˈsɪŋk/ 和 await 关键字,属于基于任务的异步模式,是 .NET 对 TAP (Task-based asynchronous Pattern)在语言级别上的支持。通过这两个关键字,可以轻松创建异步方法(我们可以像写同步代码一样去写异步代码,几乎与创建同步方法一样轻松)
net4.0 在 ThreadPool 的基础上推出了 Task 类,微软极力推荐使用 Task 来执行异步任务,现在 C# 类库中的异步方法基本都用到了 Task;
net5.0 推出了 async/await,让异步编程更为方便。我们在开发中可以尝试使用 Task 来替代 Thread/ThreadPool,处理本地 IO 和网络 IO 任务时,尽量使用 async/await 来提高任务执行效率。
控制流流转
(1)返回类型是 void 的异步方法
返回类型是 void 的异步方法,调用时不能使用 await 运算符,须直接调用;这样的调用,不阻塞调用方所在线程。
(2)返回类型是 Task 或 Task<T> 的异步方法
在异步方法前加 await 关键字,调用方线程仅执行到异步方法中 第一个 await 语句,调用方 await 语句之后还有代码,视为异步方法最后一个await语句之后的代码,将由新开线程执行;
使用关键字 async 和 await ,使开发者能更好地、简便地进异步编程。
控制流流转方式简便记忆:
- await 前,同线程(与调用方);
- await 后,新线程(包括调用方调用后代码);
- 返回 void,不阻塞;