使用async从数据库返回数据有什么好处?

时间:2013-09-19 16:32:40

标签: c# asp.net asp.net-web-api async-await

我在WebApi2上已经阅读了很多内容并且我非常喜欢它,但是我只是不明白为什么每个方法都使用async而不是标准方法。

以下是示例:

[ResponseType(typeof(BookDto))]
public async Task<IHttpActionResult> GetBook(int id)
{
    BookDto book = await db.Books.Include(b => b.Author)
        .Where(b => b.BookId == id)
        .Select(AsBookDto)
        .FirstOrDefaultAsync();
    if (book == null)
    {
        return NotFound();
    }

    return Ok(book);
}

这有什么好处?我仍然需要等待我的书在使用之前使用ef从db加载。这有什么不同于我不使用任务来检索书籍的常规方式吗?

1 个答案:

答案 0 :(得分:25)

在服务器端(例如,WebAPI),async方法允许请求线程在数据库服务器生成响应时返回到线程池。这样可以更好地扩展。

当数据库服务器将响应返回给您的WebAPI方法时(即FirstOrDefaultAsync返回的任务完成),ASP.NET将从线程池中获取另一个线程并继续处理您的请求。

请注意,每个方法都不应该是async。您只应在async某些操作时使用await。有一个great Channel9 video描述了在ASP.NET上使用async的概念和好处。我今年ThatConferenceasync on the server side上发表了演讲(链接到我的博客文章,包括幻灯片)。