我被分配到一个已经运行的新项目。我注意到人们使用async
方法创建了所有存储库类,并且每次都使用await
在控制器中调用它们,因此它们基本上用作同步代码。
将来不可能异步调用它们并且服务器运行单个SQL Server实例。
它来自一种种子API项目,创建它的人不再在公司,现在没有人确切知道它们为什么async
。但我认为在当前的项目场景中,根本不需要它们async
,它只会给系统增加不必要的复杂性。
在这种情况下,让它们async
有意义吗?
答案 0 :(得分:6)
您将“同步”与“串行”混淆。同步意味着“阻止线程”;连续意味着“一次一个”。
每次都会在控制器中调用它们,因此它们基本上都是同步代码。
不,它们是异步和串行调用的。这里的关键是在检索数据时不阻止ASP.NET请求线程。这helps your web server scale。
服务器运行一个SQL Server实例。
根据我对该体系结构的体验,大多数时候单个SQL服务器实例将充当您的可伸缩性瓶颈。所以在这种情况下,async
对任何事都没有帮助,因为您的Web服务器现在可以扩展,但它仍然会受到数据库后端的限制(同样,在大多数情况下) )。
至于你没有问过的问题(“让它们全部同步是否有意义?”),我会说不。为什么即使你可以,故意让网络服务器的可扩展性降低?如果您有可能在将来转移到可扩展的后端(例如,Azure SQL或SQL Server群集),那么您将需要Web服务器可伸缩性。