c# - 对 Controller 中的所有操作使用 async/await?

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

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

它会带来什么好处吗?

例如在 Controller 中:

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();
    }
}

最佳答案

Does it bring any benefits?

如果您需要可扩展性,它会带来好处。使用异步 IO 而不是同步阻塞 API 的要点是,一旦查询正在进行,就可以释放线程。如果您不需要这样做,并且查询 ASP.NET 线程池可以处理的端点的请求有限,那么您将看不到异步有什么好处。

不要仅仅因为可以就完全“异步所有事情”。明智地使用它并了解 async 给代码带来的开销。

关于c# - 对 Controller 中的所有操作使用 async/await?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31447755/

相关文章:

c# - ASP.NET HttpContext.Current.Session 突然总是空的

C# 和 MongoDB 使用 ObjectId 列表删除记录

c# - 使用 ThreadPool.QueueUserWorkItem - 线程意外退出

c# - 使用大对象堆后是否应该立即调用GC.Collect以防止碎片化

asp.net - COMException 未知错误 (0x80005000) - DirectoryServices

asp.net - aspx页面中的if语句

c# - 在Gridview的BoundField中显示多个数据字段

C# 深入 : Problem set?

javascript - 列表对象 ID 值与对话框模式属性绑定(bind)

c# - MVC 5 多个 HtmlHelper.ValidationSummary 在一页上