.Net Task的用法(二)async和await


先上一段代碼

static void Main(string[] args)
{
    Console.WriteLine("1");

    var task = Test();

    Console.WriteLine("4");
    Thread.Sleep(1000);

    Console.WriteLine("5");

    task.Wait();
    Console.WriteLine("7");
    Console.ReadKey();
}

static async Task Test()
{
    //主線程
    Console.WriteLine("2");
    //主線程
    await GetName();

    Console.WriteLine("6");
}

static async Task GetName()
{
    Console.WriteLine("3");

    ///開新線程
    await Task.Run(() =>
    {
        Thread.Sleep(1000 * 5);
        Console.WriteLine("5 new");
    });

}
  1. 主線程中打印1,調用方法Test() 返回一個Task
  2. 主線程執行Test中方法 打印2,通過await 關鍵字等待GetName()方法執行完成
  3. 主線程執行GetName中的方法 打印3,之后主線程開啟新的線程執行業務邏輯
  4. Main 方法中休眠1秒后打印4(因為打印4 之前並沒有要求task 變量的 返回值或者等待,所有打印4的操作和新線程中的業務處理是同步的)
  5. 新線程中業務處理完成,Test中的await 通過,所有打印5
  6. 由於打印6之前要求了task 變量等待,所以當Test 執行完成后打印6

簡單的理解就是 await 就是等待async 方法執行完成,async方法里面總能找到新開的線程

await並不是針對於async的方法,而是針對async方法所返回給我們的Task,這也是為什么所有的async方法都必須返回給我們Task。所以我們同樣可以在Task前面也加上await關鍵字,這樣做實際上是告訴編譯器我需要等這個Task的返回值或者等這個Task執行完畢之后才能繼續往下走。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM