C# async await 测试一
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()调用的结果:


浙公网安备 33010602011771号