C# 使用异步从数据库返回数据有什么好处?
我在WebApi2上读了很多书,我真的很喜欢它,但是我不明白为什么每个方法都使用异步而不是标准方法 以下是一个例子:C# 使用异步从数据库返回数据有什么好处?,c#,asp.net,asp.net-web-api,async-await,C#,Asp.net,Asp.net Web Api,Async Await,我在WebApi2上读了很多书,我真的很喜欢它,但是我不明白为什么每个方法都使用异步而不是标准方法 以下是一个例子: [ResponseType(typeof(BookDto))] public async Task<IHttpActionResult> GetBook(int id) { BookDto book = await db.Books.Include(b => b.Author) .Where(b => b.BookId == id)
[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加载我的书,然后再提供它。这与我不使用任务检索图书的常规方式有什么不同吗?在服务器端,例如WebAPI,异步方法允许请求线程在数据库服务器生成响应时返回线程池。这允许您更好地扩展 当数据库服务器返回对WebAPI方法的响应(即FirstOrDefaultAsync返回的任务完成)时,ASP.NET将从线程池中获取另一个线程并继续处理您的请求
请注意,并非每个方法都应该是异步的。仅当您希望等待某些操作时,才应使用async。有一个例子描述了在ASP.NET上使用异步的概念和好处。今年我还做了一个关于我的博客文章链接(包括幻灯片)的演讲。但当服务器等待任务完成时,这个任务正在使用其他线程执行它的工作。我们不是刚把工作从线程1转移到线程2吗?@Dmitry:不是。我有一篇解释的博客文章。Stephen Cleary提出了一个很好的问题和一个很好的答案。。。我也这么想!我不明白为什么要将这些任务与async一起使用,然后调用它们,然后等待答复。