C# 如果更改了其中一个控制器方法,是否应该将每个控制器方法都更改为异步的?
有一个控制器文件SecretAuthController.csC# 如果更改了其中一个控制器方法,是否应该将每个控制器方法都更改为异步的?,c#,.net,asp.net-mvc,asynchronous,async-await,C#,.net,Asp.net Mvc,Asynchronous,Async Await,有一个控制器文件SecretAuthController.cs public class SecretAuthController : Controller { public ActionResult Auth() { //library method whose signature recently changed to async return ProcessTelemetr
public class SecretAuthController : Controller
{
public ActionResult Auth()
{
//library method whose signature recently changed to async
return ProcessTelemetry();
}
}
因此,我的同事将此代码更改为
public class SecretAuthController : MyBaseController
{
public Async Task<ActionResult> Auth()
{
//library method whose signature recently changed to async
await MyLib.GetTaskDetails(Id);
return ProcessTelemetry();
}
}
对此几乎没有疑问:
async
李>
async
,是否需要更改所有动作方法签名,这是一条一般规则?(假设他们不等待)只有当函数中有可等待的/异步功能时,才需要使其异步。无需或无需将所有操作更改为异步 如果没有等待的调用,那么更改方法是否明智 使用异步的签名 不,你不应该。我认为Visual Studio甚至给了您一个提示: 此异步方法缺少“await”运算符,将同步运行
async
的引入使得处理I/O、DB和其他高延迟操作变得更加容易。这并不意味着它应该一直使用。它仍然会产生一些开销,如果在不需要的时候使用,它更有可能给您带来负面的性能影响。只有在实际等待某件事情时才使用async
。当你这样做的时候,你应该一直这样做
现在我们讨论控制器
,它通常是应用程序的入口点。但让我们从更广阔的角度来看待这一情况。如果有一个存储库被其他几个类使用,但由于某些原因无法使用wait
,该怎么办。如果该存储库使它的所有方法都是异步的
,那么它只会导致所有其他类在等待操作时锁定线程
相反,您应该考虑使用async
可以获得什么。消费者能等待它吗?它会提高性能吗?如果始终是async
,则是。否则,可能不会
进一步阅读:
public Async Task<ActionResult> ExFooTest()
{
//There is no awaitable call here
//normally returns.
}