C# Async與Await的使用

這個是.NET 4.5的特性,因此要求最低.NET版本爲4.5。程序員

看不少朋友仍是使用的Thread來使用異步多線程操做,基本上看不見有使用Async、Await進行異步編程的。各有所愛吧,其實均可以。只要正確使用就行,不過仍是寫了這篇文章推薦你們使用Async、Await。 緣由就是:能夠跟寫同步方法同樣去異步編程。代碼則就很是的清晰,就跟寫普通的代碼同樣,不用關係如何去異步編程,也讓不少初級程序員也可以異步編程了。下面是一個使用Thread 多線程實現的異步例子,以及一個使用Async與Await的異步例子,接下來咱們再簡單理解下Async與Await的相關技術說明。編程

Thread多線程異步編程例子

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("主線程測試開始..");
        Thread th = new Thread(ThMethod);
        th.Start();
        Thread.Sleep(1000);
        Console.WriteLine("主線程測試結束..");
        Console.ReadLine();
    }
 
 
    static void ThMethod()
    {
        Console.WriteLine("異步執行開始");
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("異步執行" + i.ToString() + "..");
            Thread.Sleep(1000);
        }
        Console.WriteLine("異步執行完成");
    }
}

  以上代碼運行效果以下圖:多線程

 

使用Async與Await進行異步編程

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("主線程測試開始..");
        AsyncMethod();
        Thread.Sleep(1000);
        Console.WriteLine("主線程測試結束..");
        Console.ReadLine();
    }
 
    static async void AsyncMethod()
    {
        Console.WriteLine("開始異步代碼");
        var result = await MyMethod();
        Console.WriteLine("異步代碼執行完畢");
    }
 
    static async Task<int> MyMethod()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("異步執行" + i.ToString() + "..");
            await Task.Delay(1000); //模擬耗時操做
        }
        return 0;
    }
}

運行效果:異步

顯而易見咱們就跟寫同步方法同樣,完成了異步方法的編寫,代碼更清晰了。async

只有擁有async才能在其內部使用await關鍵字。異步方法能夠具備Task、Task<>或void的返回類型;異步編程

await關鍵字則是用於返回值是「可等待」類型(awaitable)的方法測試

相關文章
相關標籤/搜索