using System.Threading.Tasks;namespace awaitTest2 {internal class Program{static async Task Main(string[] args){Console.WriteLine("主线程开始!主线程ID:"+Thread.CurrentThread.ManagedThreadId);F1(); // 这里没有await,F1()会在一个独立的线程中运行,主线程不会等待它完成//遇到await时,F1()会将控制权返回给调用它的线程(即主线程)//await F1(); // 这里有await,主线程会等待F1()完成后再继续执行Console.WriteLine("主线程结束!");Console.ReadLine(); // 防止主线程结束,观察子线程输出}public static async Task F1(){Task task = Task.Run(() =>{Console.WriteLine("子线程开始:" + Thread.CurrentThread.ManagedThreadId);Thread.Sleep(3000);Console.WriteLine("子线程结束");});await task;Console.WriteLine("后续线程:" + Thread.CurrentThread.ManagedThreadId);}} }
通过F1()直接调用的结果:
如果主线程即Main方法中不含Console.ReadLine();那么执行结果如下:主线程不会等到子线程结束就关闭了程序。(前台线程结束后,所有的后台线程也会被结束)
通过await F1()调用的结果: