-- C#中async,await, wait,.Result与线程阻塞,线程执行,线程死锁的那些事(含验证代码)
【官网】:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/async
应用场景
1基础资源
无
使用须知
根据具体业务场景,架构,开发纪律等来确定相关的异步编程使用方案。
配置步骤
无
常见问题
快速入门
A)异步方法的概述。
[注1] 编译器可执行开发人员曾进行的高难度工作,且应用程序保留了一个类似于同步代码的逻辑结构。 因此,你只需做一小部分工作就可以获得异步编程的所有好处。
[注2]await异步等待的地方,await后面的代码和前面的代码执行的线程可能不一样
async关键字创建了一个状态机,类似yield return 语句;await会解除当前线程的阻塞,完成其他任务。
[注3] 在执行完成前立即返回调用方法,在调用方法继续执行的过程中完成任务。
async/await 结构可分成三部分:
(1)调用方法:该方法调用异步方法,然后在异步方法执行其任务的时候继续执行;
(2)异步方法:该方法异步执行工作,然后立刻返回到调用方法;
(3)await 表达式:用于异步方法内部,指出需要异步执行的任务。一个异步方法可以包含多个 await 表达式(不存在 await 表达式的话 IDE 会发出警告)。
B)异步方法的使用示例.
b1)Test( async,不加await).
b2)Test( async+await).
b3)Test(async+异步方法.Result).
b4)Test(async+wait).
b5)Test(非Async下调用异步方法Result).