标签:
要理解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");
});
}
最后:这是我个人的理解和总结,欢迎大家来讨论或指教
标签:
原文地址:http://www.cnblogs.com/shouce/p/5274477.html