猿问

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

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

POPMUISE
浏览 59回答 1
1回答

守着星空守着你

从我的理解上来看,使用 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();......&nbsp;&nbsp;}  2. 同步Action + 数据库访问Asyncpublic ActionResult Practice(){......SqlCommand command = new SqlCommand ();......command .ExecuteNonQueryAsync();
随时随地看视频慕课网APP
我要回答