1. 程式人生 > >C# 5.0 新特性 async和await

C# 5.0 新特性 async和await

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的意思了嗎?其實就是等待,一直等待到非同步完成為止;這種需求很少吧?大多情況都用不到,但是如果有需求的話,可以用這種方式,這種比較程式碼比較清晰一些;當然也有更高深的運用,封裝好多好多程式碼,這裡就不說了,知道他的意思就好了。