C#中async/await的执行顺序

C#在某个版本(具体不记得了,大概是5.0)开始支持异步编程,关键字为async和await,有了这个关键字,异步编程变得非常简单,但具体代码执行顺序,未必人人都搞得明白。

我以一个常规的异步操作来讲解其执行顺序,如下图:

1、所有软件运行都有一个入口,这就是第一步
2、执行到调用异步方法,开始执行方法体中的代码,如下图中的图标2,这是一个转折点,此时开始跳入方法体
3、遇到await关键字,这是一个很关键点,每一个await都会将执行顺序一分为二,两条线同时齐头并进。如下图中的图标3,开始分出4和6两个方向
4、主线程会跳出方法体,回到调用点,继续执行后续代码,如下图中从图标4开始一直执行到图标5
5、另外一个线程,如下图标6的方向继续执行,直至完成
6、这时,图标6方向的线程也执行完毕了,则跳出方法体,回到主线程,此时要看主线程执行到哪里,如下图,就回到了图标5
7、图标5代表执行完毕了,则整个代码就执行完毕了。

异步执行顺序

执行上述代码,可以看到执行结果。

异步执行运行结果