c#有关异步的问题: async await Task

比方说我现在有个api:a页面中有个 a1方法, a1异步调用a2方法, a2异步调用a3方法, a3中是执行数据库查询操作的,那么我的a3中数据库查询也必须要用异步数据库查询方法吗?如果是同步查询数据库,那么前面的异步起作用了吗?

当然起作用了,a3 同步只是a3必须等查询数据库执行完才能继续只想,a2和a3是异步,a2其实调用a3后就不会理他了,同理a1也是,但是,最后结果肯定是a3执行结束才会获取到

最里面的必须异步,不然当然不行。语法上,await只能作用在async修饰的方法上。

要注意,async的代码其实是语法糖,C#会把里面的await拆分成一个异步调用和一个完成的回调。如果你最里面的是同步的方法——当然你非要这么写也不是不可以,但是这导致所有的调用其实都回到了同步。

如果你说的A1是一个MVC或WebAPI的action 那其实还是有很大作用的,会提高IIS的可处理连接数

如果最里面的是同步的,实际上,没鸟用。异步的主要作用就是要用在异步IO上,比如磁盘/网络这些IO,相比于CPU太慢。使用async / await 在底层可以映射到系统的异步IOApi上。节约时间,提高效率。

你的数据库查询可以放在一个task里面 然后你await这个task,然后再return就可以啦