要理解async和await的用法,首先要了解Task相關知識,這裡不做說明,因為這不是本文的重點。
如果你已經對Task很了解,那麼如何使用async和await,在此主要總結了以下三點:
對於第三點說的有點繞,所以下面結合代碼說一下:
static void Main(string[] args)
{
Test();
Console.WriteLine("Test End!");
Console.ReadLine();
}
static async void Test()
{
await Test1();
Console.WriteLine("Test1 End!");
}
static Task Test1()
{
Thread.Sleep(1000);
Console.WriteLine("create task in test1");
return Task.Run(() =>
{
Thread.Sleep(3000);
Console.WriteLine("Test1");
});
}
執行結果:

對結果解釋是:
Main方法調用具有async標示的Test方法,Test方法通過await調用Test1方法,當執行順序執行到Test1時,遇到裡面的異步操作;則Test方法會等待Test1裡面的異步操作執行完再往下執行;但是Main方法,不用再等待Test方法執行,可以繼續往下執行。
對於上面情況,可以不使用async和await也能實現,代碼如下:
static void Main(string[] args)
{
Test();
Console.WriteLine("Test End!");
Console.ReadLine();
}
static void Test()
{
var test1=Test1();
Task.Run(() =>
{
test1.Wait();
Console.WriteLine("Test1 End!");
});
}
static Task Test1()
{
Thread.Sleep(1000);
Console.WriteLine("create task in test1");
return Task.Run(() =>
{
Thread.Sleep(3000);
Console.WriteLine("Test1");
});
}
最後:這是我個人的理解和總結,歡迎大家來討論或指教