mvc能全部用async action吗? 10
mvc能全部用asyncaction吗?mvc中有一些asyncaction用于异步操作异步返回,我看一些资料说异步操作用于耗时的io操作包括数据库连接,那我几乎每个ac...
mvc能全部用async action吗?mvc中有一些async action用于异步操作异步返回,我看一些资料说异步操作用于耗时的io操作包括数据库连接,那我几乎每个action都用到了读取数据库的操作,我想是不是所有的action都能用async的方式。但是,微软的mvc实例工程并没有全部用async,肯定是有原因的。
我想问下,mvc中是否可以全部使用async action的方式,如果可以。有什么好处或者坏处 展开
我想问下,mvc中是否可以全部使用async action的方式,如果可以。有什么好处或者坏处 展开
展开全部
从我的理解上来看,使用 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();
我的问题是,如果我使用.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();
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询