c# async await 的使用
一直没有搞懂这个最新的异步特性,今天研究了一下,记录一下成果。话不多说,先上代码
static void Main(string[] args)
{
Console.WriteLine("start");
test();
Console.WriteLine("Main end");
Console.ReadKey();
}
private static async void test()
{
string reslut = await Task.Run<string>(() =>
{
Thread.Sleep(2000);
return "async end";
});
Console.WriteLine(reslut);
}
首先我们要明确一点,await 和 async必须和Task一起才能实现异步模式,准确的说await和async就是Task异步模式同步写法的俩个关键字。
使用这两个关键字实现异步,需要把异步代码放到同一个方法中,这个方法中的异步任务是异步执行的,这个时候如果使用了await关键字来修饰异步任务,那么要执行完string reslut = await Task.Run<string>(() => { Thread.Sleep(2000); return "async end"; });
这个之后,方法就会返回执行Main方法中的Console.WriteLine("Main end"); Console.ReadKey();
,后面的Console.WriteLine(reslut);
不会执行,等异步任务结束之后,才会执行Console.WriteLine(reslut);
。
private static async void test()
{
string reslut = await Task.Run<string>(() =>
{
Thread.Sleep(2000);
return "async end";
});
Console.WriteLine(reslut);
}
运行结果:
到这里大概对await 和 async这两个关键字的使用有了一点心得,异步任务是异步执行的方法体,await修饰的任务之后的代码是,异步任务执行完之后的回调方法,只不过写法上更简单而已,在一个方法里面就实现了子线程到ui主线程之间的切换,这个应该是编译器根据关键字实现的。好了,到这里就结束了,希望能帮到跟我一样不知道怎么使用await和async异步任务的人。