c# - 应该多广泛地使用异步/等待模式?

标签 c# .net asp.net-web-api async-await asp.net-web-api2

我在 SO 上看到了以下评论:

“在较新版本的 .Net 中使用异步等待模式将使效率更接近事件驱动架构,如 NodeJS 和 Nginx”

我继承了一个 Web API 应用程序,其中基本上所有层中的所有方法都利用异步/等待模式。上面关于 async/await 性能的评论非常引人注目。在 Web API 应用程序中的所有层的所有方法上实现 async/await 是否合适?有没有我应该避免 await/async 或小心不要过度使用它的场景?

最佳答案

我推荐阅读我的 intro to async on ASP.NET article .

Is it proper to implement async/await on all methods of all layers in a Web API app?

是的。事实上,这是势在必行的。 async 真的只有在你一直使用它的情况下才有效(就提供你从 async 中获得的好处而言)。因此,如果您的实现异步调用另一个 API,那么该方法应该被异步使用,等等,一直到您的初始 Controller 操作。

特别是,您希望避免同步异步反模式。

Are there any scenarios where I should avoid await/async or be careful to not overuse it?

是的。你应该避免“假异步”。这是开发人员使用 Task.Run(或类似的)来获取任务以便他们可以“使用异步”的反模式。它通常看起来像这样:

int GetId() { ... }
Task<int> GetIdAsync() => Task.Run(() => GetId());
...
var id = await GetIdAsync(); // Look, I'm async! (not really)

在这种情况下,代码会损害而不是帮助您的可扩展性。

关于c# - 应该多广泛地使用异步/等待模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49932014/

相关文章:

c# - 无法从 C# 类访问 ColdFusion Web 服务

c# - ReSharper 为 lambda 表达式中的变量名称提供 "@"前缀

azure - Azure Web API 的身份验证 token

来自原点的 Angular 和 WebApi Cors 请求已被 CORS 策略阻止

c# - 如何使用 C# 将多个 A4 PDF 合并为 A3 PDF

c# - DateTime.ParseExact,忽略时区

c# - 为什么使用伙伴类进行验证?

c# - 如何在 Unity 的 GridLayoutGroup 中获取 child 的世界位置?

c# - 很久之后SqlDependency Change/Error/Client error

c# - 具有 Entity Framework 上下文的devart web api调用过程