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();
- 1 回答
- 0 关注
- 58 浏览
添加回答
举报