c# async和await
一直以来对async和await都有点迷糊,今天花时间在网上看了很多解释,现在把自己的理解整理下,如果有不对的地方希望大家指正。
await这里有几点说明:
1、只能在async修饰的函数中使用
2、使用了await表明需要异步等待(就是将异步执行变为同步执行效果,与同步代码不同的是使用await执行的异步代码块不阻塞UI)
注意:关于await执行的异步代码块不阻塞UI这块之前一直没有体会到,最后发现在async修饰的函数里面需要新建个线程执行这样才会有不阻塞UI的效果,不是加了async就会新产生一个线程来执行,需要手动的新建线程来执行耗时比较长的操作。
下面写一个小例子来说明这点:
public async Task<string> getBody()
{
return await Task.Run(() =>
{
Thread.Sleep(20000);
return "Body";
});
}
public async Task Paint()
{
Debug.Print("hearder");
Debug.Print(await getBody());
Debug.Print("Footer");
}
public async void test()
{
Debug.Print("start");
await Paint();
Debug.Print("end");
}
调用test方法执行结果
start
hearder
等待20s
Body
Footer
end
调用test不会阻塞UI
注意:如果getBody没有新建一个新的线程UI会阻塞。
总结:
目前稍微体会到async和await作用,就是可以将异步的操作变为同步的效果。有写场景有三个操作需要按顺序执行,但是这三个操作又是异步的就可以使用await实现异步等待按照123顺序执行。
比如上面的例子,我想获取一个页面,我可以先显示头部,耗时的body我通过异步的效果来执行,这样就不用等待所有的操作执行完了再显示出页面。