【问题标题】:Async Action + Sync DBQuery VS sync Action + Async DbQuery异步操作 + 同步 DBQuery VS 同步操作 + 异步 DbQuery
【发布时间】:2014-09-03 09:05:09
【问题描述】:

我在 .net 框架 4.5.1 下使用 Asp.net MVC 5。互联网上有很多例子展示了控制器异步操作的用法,如下所示:

public async Task<ActionResult> Practice()
{
    ......
    SqlCommand command = new SqlCommand ();
    ......
    await command .ExecuteNonQuery();
    ......   
    return View();
}

同时,SqlCommand提供了类似ExecuteNonQueryAsync这样的异步方法,内部实现了异步操作,代码如下:

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

假设所有耗时的操作都是数据库CRUD,我想知道上面两个代码sn-ps有什么区别吗?

具体来说,这两种方式是否都通向最终目标:“一个线程在等待第一个请求完成时不会被阻塞以响应其他请求。因此,异步请求可以防止请求排队和线程池增长有许多并发请求会调用长时间运行的操作。” ?

非常感谢。

【问题讨论】:

    标签: asp.net-mvc asynchronous


    【解决方案1】:

    在第一个查询中,await 出现了一个无法编译的非异步方法。 在第二个示例中,您启动了异步方法,但您没有等待它,因此结果视图将为空。正确的方法是您使用的两种方法的混合:

    public async Task<ActionResult> Practice()
    {
        ......
        SqlCommand command = new SqlCommand ();
        ......
        await command.ExecuteNonQueryAsync();
        ......   
        return View();
    }
    

    awaitExecuteNonQueryAsync 的结果,所以一旦完成,你大概可以使用命令的结果来填充视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2021-11-28
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多