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

Căt*_*doi 2 c# asp.net asp.net-mvc asynchronous async-await

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

它带来了什么好处?

例如在控制器中:

public async Task<PartialViewResult> EditNewsAsync(int id)
{
    var newsReader = new NewsReader();
    var news = await newsReader.GetAsync(id);
    return this.PartialView("_AddEditNews", news);
}
Run Code Online (Sandbox Code Playgroud)

在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Yuv*_*kov 5

它带来了什么好处?

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

不要只是因为你可以完全"异步所有的事情".明智地使用它并理解async为您的代码带来的开销.