程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 如何在入口點使用異步等待(await)

如何在入口點使用異步等待(await)

編輯:關於C#

眾所周知(除了不知道的),C#5新增了一個異步等待的功能,用來來非常簡單就能夠實現異步等待 了。規則是這樣的:

在調用異步方法前面加上await關鍵字,並且調用該異步方法的方法前面要 加上一個async關鍵字。

比如這樣:

async void DoDelayAsync()  
{  
    await Task.Delay(999999999);  
}

在進入DoDelayAsync方法時代碼同步執行,直到遇到await運算符才會開始異步等待,在等待 任務執行完成之前,應用程序不會掛死,這用在用戶界面上相當好,當代碼在await處等 待異步操作完 成的過程中,用戶依然可以操作界面上的其他元素。

以前,要做到這一點,通常需要從另一個線 程進行回調,使用委托來CallBack。如今使用await運算符就變得簡單了N倍。

昨天晚上收到一 封垃圾郵件,確實是垃圾郵件,因為我是在垃圾箱中看到的一封未讀信件。不知道是誰,反正連名字也 不敢報上來。他就提了這麼個問題。

async static void Main(string[] args)  
{  
    await Task.Delay(8000);  
    Console.Read();  
}

這位仁兄非常強大,竟然在入口點也玩起了異步等待,我猜他當時的內心世界一定是姹紫嫣 紅的,開心得無法形容,因為他即將發現新大陸,在入口點也能異步await。後來我想他的內心世界肯定 變成了殘花敗柳。我估計當他狠狠地按下F5後,發現了以下驚魂一幕。

顯然呢,編 譯器是不希望他發現新大陸,狠狠地給他以沉重打擊。

是啊,在方法內部用await異步等待,那 調用的方法肯定要在前面加上async的,但是偏偏這個方法又是Main,你拿他沒辦法。這下可怎麼辦呢?

有朋友肯定會說,好辦,再定義一個方法,在那方法裡面再封裝一個帶async的方法就行了,就 像這樣。

class Program  
{  
    static void Main(string[] args)  
    {  
        DoDelayAsync0();  
        Console.Read();  
    }  
     
    async static void DoDelayAsync0()  
    {  
        await Task.Delay(3000);  
        Console.WriteLine("Done, Done");  
    }  
}

這樣就能運行了,這方法不錯。

既然方法嵌套可以解決,那用委托的結果也是等同的 。

static void Main(string[] args)  
{  
    Action act = async () =>  
        {  
            await Task.Delay(5000);  
            Console.WriteLine("哇哈哈,哈哈哇。");  
        };  
    // 調用委托  
    act();  
    Console.Read();  
}

這樣,新大陸就出現了。

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved