15

我在 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 加载我的书,然后再提供它。这是否与我不使用任务来检索书籍的常规方式有所不同?

4

1 回答 1

26

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

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

请注意,并非每种方法都应该是async. 您应该只async在您想要进行await某些操作时使用。有一个很棒的 Channel9 视频,描述了async在 ASP.NET 上使用的概念和好处。今年我还在ThatConference上async发表了关于服务器端的演讲(链接到我的博客文章,包括幻灯片)。

于 2013-09-19T16:34:18.183 回答