C# 5.0 新特性 async和await
阿新 • • 發佈:2019-02-09
1: async和await 是 C# 5.0 的新特性
2: 需要.net Framework 4.5,或更高階版本才能使用
3: 需要VS2012,或更高階版本才能使用
4:它是用來配合 Task.Run(()=>{ 這裡寫程式碼 });來使用的,Task.Run是一個很方便的非同步執行
5: 使用方法:
在任何方法前面加關鍵字 async ,比如:
public static void Main(string[] args) { Program p = new Program(); p.Print(); Console.ReadKey(); } public async void Print() { Console.WriteLine("1111111"); Console.WriteLine("222222"); Console.WriteLine("33333333"); }
大家可以看到我在這個方法前面加了一個async,有什麼用呢?然並卵,只是告訴了你這個方法變成了支援非同步的方法。這個時候列印的話,結果集還是按順序來列印
大家還需要知道一個關鍵字:Task ,注意Task 才是核心,async和await只不過是用來服務Task的 ,它是Task的好基友,Task 可以輕鬆實現非同步執行;你可以把要非同步執行的東西都丟在裡面,那怎麼用呢?比如:
public static void Main(string[] args) { Program p = new Program(); p.Print(); Console.ReadKey(); } public async void Print() { Console.WriteLine("1111111"); Task.Run(() => { Thread.Sleep(2000); Console.WriteLine("222222"); }); Console.WriteLine("33333333"); }
再看看列印的結果,你會發現2222被非同步執行了,先執行了11111和33333,2秒以後才出現了了222222
但是這些操作和async沒有任何關係,你去掉方法的async也一樣可以執行,而且結果一模一樣,別急,這個時候我們再加關鍵字
await ,await 必須在有 關鍵字 async的方法中才可使用,所以程式碼如下:
public static void Main(string[] args) { Program p = new Program(); p.Print(); Console.ReadKey(); } public async void Print() { Console.WriteLine("1111111"); await Task.Run(() => { Thread.Sleep(2000); Console.WriteLine("222222"); }); Console.WriteLine("33333333"); }
這個時候再看看執行結果
所以你現在理解了await的意思了嗎?其實就是等待,一直等待到非同步完成為止;這種需求很少吧?大多情況都用不到,但是如果有需求的話,可以用這種方式,這種比較程式碼比較清晰一些;當然也有更高深的運用,封裝好多好多程式碼,這裡就不說了,知道他的意思就好了。