有关如何将EF 6与MVC 5结合使用的最新EF教程似乎倾向于使用对数据库的异步调用,例如:
Department department = await db.Departments.FindAsync(id);
这是新的标准/最佳实践吗?
我不确定使用ASP.NET MVC开发这种样式有什么好处。
有人可以对此模式发表评论,这是MS正在推动的新标准吗?
为了决定是异步还是同步,请比较收益和成本:
异步:
SynchronizationContext
同步:
如果要调用高延迟服务,请选择与ASP.NET异步。 Web服务可能具有高延迟。OLTP数据库几乎总是低延迟的。
如果您的应用程序受益于非常高的并发性(100+),请选择async。 大多数应用程序没有这么高的级别,或者它们的后端服务无法承受如此大的负载。使Web应用程序扩展规模没有意义,但会使后端过载。呼叫链中的所有系统都 必须 受益于高度的并发性,才能使异步受益。
典型的高延迟服务(异步的好案例):
SemaphoreSlim
典型的低延迟服务(同步的好案例):
这些按 典型 情况分类。所有这些也可以属于相反的类别。
您可以在同一应用中混合使用同步和异步。 处于最佳状态时使用异步。
那么,为什么Microsoft和Entity Framework团队推广异步使用?这是该答案的主观部分:可能是Microsoft内部政策。他们可能会预期客户端应用程序中的EF使用情况(对于此类应用程序来说,异步性非常好)。或者,他们没有意识到异步数据库调用几乎总是浪费开发人员的时间而没有好处。大多数人没有意识到这一点,因为异步是如今的方式。