对控制器中的所有操作使用async / await?

时间:2015-07-16 07:21:06

标签: c# asp.net asp.net-mvc asynchronous async-await

是否可以将所有操作异步,一直到从db读取的管理器和函数(使用LINQ的asyncs)?

是否带来任何好处?

e.g。在控制器中:

public async Task<PartialViewResult> EditNewsAsync(int id)
{
    var newsReader = new NewsReader();
    var news = await newsReader.GetAsync(id);
    return this.PartialView("_AddEditNews", news);
}
在NewsReader.cs中:

public async override Task<News> GetAsync(int id)
{
    using (var ctx = new KreditorWebEntities())
    {
        IQueryable<News> query = from n in ctx.News
                    where n.new_id == id
                    select new News { Id = n.new_id, 
                                      UserId = n.new_fk_addedByUserId,
                                      AddedDatetime = n.new_addedDatetime,
                                      ShowOnlyOnce = n.new_showOnlyOnce,
                                      Text = n.new_text };

        return await query.FirstOrDefaultAsync();
    }
}

1 个答案:

答案 0 :(得分:5)

  

它带来了什么好处吗?

如果您需要 可扩展性 ,它会带来好处。使用异步IO而不是同步阻塞API的关键是,在查询正在进行时,您将释放该线程。如果您不需要,并且您查询ASP.NET线程池可以处理的端点的请求有限,那么您将看到async没有任何好处。

不要全力以赴&#34;异步所有的事情&#34;只是因为你可以。明智地使用它并理解async为您的代码带来的开销。