我在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加载。这有什么不同于我不使用任务来检索书籍的常规方式吗?
答案 0 :(得分:25)
在服务器端(例如,WebAPI),async
方法允许请求线程在数据库服务器生成响应时返回到线程池。这样可以更好地扩展。
当数据库服务器将响应返回给您的WebAPI方法时(即FirstOrDefaultAsync
返回的任务完成),ASP.NET将从线程池中获取另一个线程并继续处理您的请求。
请注意,每个方法都不应该是async
。您只应在async
某些操作时使用await
。有一个great Channel9 video描述了在ASP.NET上使用async
的概念和好处。我今年ThatConference在async
on the server side上发表了演讲(链接到我的博客文章,包括幻灯片)。