为了账号安全,请及时绑定邮箱和手机立即绑定

我想问下,mvc中是否可以全部使用async action的方式,如果可以。有什么好处或者坏处?

我想问下,mvc中是否可以全部使用async action的方式,如果可以。有什么好处或者坏处?

PHP
POPMUISE 2023-03-17 22:18:37
mvc能全部用async action吗?mvc中有一些async action用于异步操作异步返回,我看一些资料说异步操作用于耗时的io操作包括数据库连接,那我几乎每个action都用到了读取数据库的操作,我想是不是所有的action都能用async的方式。但是,微软的mvc实例工程并没有全部用async,肯定是有原因的。
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

从我的理解上来看,使用 async Task<ActionResult>去在Controller中实现异步action,目的是为了在高耗时的action操作中,可以暂时把线程池让出来给别的请求,一般网上能找到的文章都是在async action中,await SqlCommand.ExecuteNonQuery,这样就可以达到异步的处理目的。
  我的问题是,如果我使用.net中自带的,ExecuteNonQueryAsync,这个方法其实已经在内部实现了异步访问数据库的操作,应用程序中只需要处理其返回结果就可以了-----那这样的话,我还有必要使用异步action吗?
  从我自己的猜测来说,应该是不需要,因为在ExecuteNonQueryAsync的过程中,上下文已经在其内部实现中被挂起,线程池已经将此线程让出给别的请求,即达到了使用异步的目的。
  那么,在只考虑数据库为高耗时操作的情况下,mvc的异步操作可以分为两种实现:
  1. 异步Action + await 同步方法访问数据库
  
public async Task<ActionResult> Practice()
{
......
SqlCommand command = new SqlCommand ();
......
await command .ExecuteNonQuery();
......  
}

  2. 同步Action + 数据库访问Async

public ActionResult Practice()
{
......
SqlCommand command = new SqlCommand ();
......
command .ExecuteNonQueryAsync();

查看完整回答
反对 回复 2023-03-20
  • 1 回答
  • 0 关注
  • 58 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信