C# 仅用wait调用异步类,有意义吗?

C# 仅用wait调用异步类,有意义吗?,c#,asp.net-core,C#,Asp.net Core,我被分配到一个已经在运行的新项目。我注意到,人们使用async方法创建了所有存储库类,并且每次都使用await在控制器中调用它们,因此它们基本上是作为同步代码工作的 将来不可能异步调用它们,并且服务器只有一个SQL server实例在运行 它来自一种种子API项目,创建它的人已经不在公司里了,现在没有人知道他们为什么是async。但我认为,在当前的项目场景中,让它们异步根本没有意义,这只是给系统增加了不必要的复杂性 在这种情况下,让它们异步有意义吗 你把“同步”和“串行”混淆了。同步意味着“阻塞

我被分配到一个已经在运行的新项目。我注意到,人们使用
async
方法创建了所有存储库类,并且每次都使用
await
在控制器中调用它们,因此它们基本上是作为同步代码工作的

将来不可能异步调用它们,并且服务器只有一个SQL server实例在运行

它来自一种种子API项目,创建它的人已经不在公司里了,现在没有人知道他们为什么是
async
。但我认为,在当前的项目场景中,让它们
异步
根本没有意义,这只是给系统增加了不必要的复杂性

在这种情况下,让它们
异步
有意义吗

你把“同步”和“串行”混淆了。同步意味着“阻塞线程”;“串行”的意思是“一次一个”

它们每次都在控制器中用wait调用,因此它们基本上是作为同步代码工作的

不,它们是异步和串行调用的。这里的关键是在检索数据时ASP.NET请求线程不会被阻塞。这个

服务器有一个正在运行的SQL server实例

根据我对该体系结构的经验,大多数情况下,单个SQL server实例将成为您的可伸缩性瓶颈。因此,在这种情况下,
async
没有任何帮助,因为您的web服务器现在可以扩展,但它仍然受到DB后端的限制(在大多数情况下也是如此)

至于你没有问的问题(“让它们都同步有意义吗?”),我会说没有。为什么故意降低web服务器的可伸缩性,即使你可以做到?如果将来有可能移动到可扩展的后端(例如Azure SQL或SQL Server群集),那么您将需要web服务器的可扩展性。

您将“同步”与“串行”混淆了。同步意味着“阻塞线程”;“串行”的意思是“一次一个”

它们每次都在控制器中用wait调用,因此它们基本上是作为同步代码工作的

不,它们是异步和串行调用的。这里的关键是在检索数据时ASP.NET请求线程不会被阻塞。这个

服务器有一个正在运行的SQL server实例

根据我对该体系结构的经验,大多数情况下,单个SQL server实例将成为您的可伸缩性瓶颈。因此,在这种情况下,
async
没有任何帮助,因为您的web服务器现在可以扩展,但它仍然受到DB后端的限制(在大多数情况下也是如此)


至于你没有问的问题(“让它们都同步有意义吗?”),我会说没有。为什么故意降低web服务器的可伸缩性,即使你可以做到?如果将来有可能移动到可扩展的后端(例如Azure SQL或SQL Server群集),那么您将需要web服务器的可扩展性。

我想说的一件事是,如果在任何阶段都可能需要异步,最好从一开始就这样做。我曾经在一些项目中工作过,在这些项目中,有些东西需要异步化,但这些东西还没有异步化,而效果流是一个巨大的难题。我不理解你的问题。当您使用create这个词时,我认为
new
和C#不允许构造函数是异步的,这是一个很好的理由。另外,无论SQL是否在同一个框中,
Async
在使用异步SQL调用时很可能会提高性能。@jmchilney我同意你的看法,如果将来还有一点可能是异步的,那就好了。但事实并非如此。等待
异步
方法与简单调用同步方法不同,因为它仍然允许用户界面在执行耗时的工作时保持响应。但这只与本地应用程序相关,而与web应用程序无关。我并不声称自己是权威,但在你的特殊情况下,我不知道使用
async
/
await
有什么好处。我认为这个问题可以帮助你更好地理解
async
/
await
:我想说的一点是,如果在任何阶段都有可能需要异步,你最好一开始就这样做。我曾经在一些项目中工作过,在这些项目中,有些东西需要异步化,但这些东西还没有异步化,而效果流是一个巨大的难题。我不理解你的问题。当您使用create这个词时,我认为
new
和C#不允许构造函数是异步的,这是一个很好的理由。另外,无论SQL是否在同一个框中,
Async
在使用异步SQL调用时很可能会提高性能。@jmchilney我同意你的看法,如果将来还有一点可能是异步的,那就好了。但事实并非如此。等待
异步
方法与简单调用同步方法不同,因为它仍然允许用户界面在执行耗时的工作时保持响应。但这只与本地应用程序相关,而与web应用程序无关。我并不声称自己是权威,但在您的特殊情况下,我不知道使用
async
/
await
。我认为这个问题可能会帮助您更好地理解
async
/
await