首页 新闻 会员 周边 捐助

为什么 asp.net core里方法有的是用async来标识了?

0
悬赏园豆:5 [已解决问题] 解决于 2020-06-29 15:21

我看到有些代码,比如 asp.net core razor pages里的方法用了async/await 组合, 有些用了await 就是要同步等待结果,这里为什么不直接用同步的就是好了,而要而外使用 async/await 组合 比如下面代码。

public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_dbContext.Categories.Add(Category);
await _dbContext.SaveChangesAsync();
return RedirectToPage("./Index");
}

使用了之后 async/await 有什么好处吗这里吗?

koi的主页 koi | 初学一级 | 园豆:4
提问于:2020-06-28 15:50
< >
分享
最佳答案
0

看看微软的官方说明吧
Asynchronous programming with async and await

收获园豆:5
爱编程的大叔 | 高人七级 |园豆:30844 | 2020-06-28 20:19
其他回答(4)
0

异步 提高并发能力

程序员编程日记 | 园豆:6 (初学一级) | 2020-06-28 16:03
0

await 不是同步等待,是异步执行时释放当前钱程,提高线程的利用率。

dudu | 园豆:29379 (高人七级) | 2020-06-28 16:31
0

这样可以很方便await(需求异步函数),尤其现代很多都是网络组件化的开发,那么会有很多模块实际也是异步的。

假如没有这种简化代码版本 —— 估计一些人甚至都不知道怎么阻塞。

传统“并行”(不一定是真并行)方式,不仅写作繁琐,常规使用也带来效率较低(见Thread使用)。

这种方式一般情况并不能真正提高HttpServer的运行效率,甚至很多时候是可能降低的(如长时计算型却过多的异步处理)——因为HttpServer本身就有Work池(Tcp连接池后将连接中的请求【任务】置于work池)管理,且提供了参数设置等等,这个设置就可以使cpu硬件以及任务类型达到一个较优参数选项。

较大的这种使用体会区别 —— 你可以看看android事件函数和传统的winForm时间函数,UI是串行的(射击成并行的一般没有意义,比如一个函数让变大,一个函数同时让变小,这样设计没有意义且会容易造成错误,因此是Invoke模式),但是Invoke之下比如文件操作,总不能卡着等待吧...Android就干脆简化,比如网络操作必须异步函数,这样直接和UI剥离,而传统winForm总有人出现写代码写出诡异,缺点当然就是——不够灵活,就像一个事件只能靠接口一样。

花飘水流兮 | 园豆:13617 (专家六级) | 2020-06-28 19:45
0

如果不做高性能的项目,就不用考虑async

kiba518 | 园豆:191 (初学一级) | 2020-06-29 08:39

很多时候不想用,但内部调用的模块方法只有异步方法。

支持(0) 反对(0) Adming | 园豆:119 (初学一级) | 2020-06-30 13:19

@Adming: 那一定是那个方法有性能问题,通常framework会提供异步和同步的,如果只有异步,那就用异步,肯定是同步性能不好

支持(0) 反对(0) kiba518 | 园豆:191 (初学一级) | 2020-06-30 13:35

@kiba518: 问题是日常应用中不止调用官方提供的模块,还有很多第三方的。为了减小麻烦,现在定义接口一开始就直接定义成异步的,省得后面才发现内部有对异步方法的调用导致重新定义方法签名。

支持(0) 反对(0) Adming | 园豆:119 (初学一级) | 2020-06-30 13:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册