前提声明:C# 5.0 .NET Framework 4.5 2012-08-15 异步和等待(async和await)、调用方信息(Caller Information) (C#版本与.NET版本对应关系以及各版本的特性).,所以VS2010及其以前的版本都是不行的。
两段代码直接看出名堂:
class Program { static void Main(string[] args) { //PaintBody(); //PaintBodyAsync(); Console.WriteLine("End"); } static async Task PaintBodyAsync() { Console.WriteLine("Header"); //就是遇到awaIt,这里面的东西不会阻塞,继续执行 await Task.Run(() => { //System.Threading.Thread.Sleep(1000);//线程不管是否睡眠,都是先执行其他方法 Console.WriteLine("Body"); }); Console.WriteLine("Footer"); } static void PaintBody() { Console.WriteLine("Header"); System.Threading.Thread.Sleep(1000); Console.WriteLine("Body"); Console.WriteLine("Footer"); } }