首页 新闻 会员 周边 捐助

关于一些async await用法的疑惑求教

0
悬赏园豆:5 [已解决问题] 解决于 2023-11-28 17:19

我看到项目使用orm例如SqlSugar或者ef的时候,喜欢使用如下int i= await DB.CountAsync(),
这个既然会一直等待数据返回Count,为啥不直接使用 int i=DB.Count();反正都是耗时那么久,async await相反还要使用一个Task开启一个异步,为什么还要使用async await。希望有人能解答下

灬丶的主页 灬丶 | 初学一级 | 园豆:9
提问于:2023-11-28 16:49
< >
分享
最佳答案
0

await DB.CountAsync 会在等待异步 I/O 操作时释放当前线程,而线程是极其宝贵的资源

收获园豆:4
dudu | 高人七级 |园豆:31030 | 2023-11-28 16:57

等到返回结果了再取回一个线程?

灬丶 | 园豆:9 (初学一级) | 2023-11-28 17:11

@灬丶: 是的

dudu | 园豆:31030 (高人七级) | 2023-11-28 17:12
其他回答(1)
0

这是一个很好的观察!确实,使用async和await时,代码会等待异步操作完成,但这并不意味着整个程序会被阻塞。关键在于异步操作的机制。

当你使用await等待异步操作时,它允许程序继续执行其他任务,而不必等待当前的异步操作完成。这种方式允许你在等待的同时执行其他异步任务,从而提高并发性能。

比如,在异步等待数据库查询的同时,程序可以执行其他任务,而不必等待整个数据库查询完成。这是异步操作的优势之一,因为在等待的时间内,程序可以做其他有用的工作,而不是被阻塞。

总的来说,虽然async和await会等待异步操作的结果,但是在等待的过程中,它允许程序执行其他任务,从而保持了并发性和响应性。这是与同步操作不同的地方。

我们可以通过一个更简单、更通用的例子来说明,比如在洗衣服的场景中。

同步操作:
    想象一下你有一堆脏衣服需要洗。
    你一次只能洗一件衣服,而且你必须等待每一件衣服洗干净后才能开始洗下一件。
    这样的处理方式是同步的,因为你必须等待每个任务(洗一件衣服)完成后才能继续下一个。

异步操作:
    现在,假设你有一台先进的洗衣机,可以同时处理多件衣服。
    你把所有脏衣服一次性放进洗衣机,然后启动它。
    洗衣机会异步地处理每一件衣服,而你不必等待整个洗衣过程完成,可以去做其他事情。
    这意味着在等待某些任务完成的同时,你可以同时处理其他任务,提高了效率。

在这个例子中,同步操作就像一次只能洗一件衣服,而异步操作允许你同时处理多个任务,就像一次性处理多件衣服。这种并发处理方式使得整体任务能够更迅速地完成。在编程中,异步操作也是为了类似的目的,提高程序的并发性和效率。

收获园豆:1
枫轻 | 园豆:51 (初学一级) | 2023-11-28 17:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册