使 API 方法异步是一种好方法吗?[关闭]

Is it a good approach to make API method async? [closed]

提问人:Muhammad Bilal 提问时间:6/4/2023 更新时间:6/4/2023 访问量:81

问:


想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。

6个月前关闭。

使 API 方法异步是一种好方法吗?

我有一个API,可以创建用户并将验证码发送到用户电子邮件。 JWT 令牌是在用户电子邮件上发送电子邮件后生成的,因此我已将方法和 API 设置为异步。那么,这是一个好方法,还是请指导处理此类请求的最佳方法。

我正在使用实体框架工作,所以问题是,sendEmail 是一种不同的方法。如果我不make is async,它会给出“无法访问已处置的上下文实例”。

C# asp.net API 异步 async-await

评论

1赞 Joshua 6/4/2023
关闭 -> 需要更多关注。如果没有更多信息,根本无法回答。使用很重要。我最终不得不提供自己的HTTP客户端,因为Microsoft没有提供完全同步的API。(是的,有一个同步呼叫。它不会一直同步,如果上面有人,它可能会死锁。await

答:

1赞 Adalyat Nazirov 6/4/2023 #1

异步代码的使用很大程度上取决于您的应用程序和特定要求。

异步运行代码可能会因线程切换而增加开销,但这种方法还可以加快请求-响应周期,并使应用程序能够同时处理更多请求。

一个常见的误解是,使用 async 关键字总是会导致更快的响应生成。仅当您有能力同时运行多个 I/O 调用时,才适用。在这种情况下,总执行时间将大约等于最长单个操作的持续时间。但是,单个异步操作不太可能优于其同步对应操作。

使方法异步的另一个动机是在处理当前 I/O 调用时释放线程以处理其他请求。这更多的是关于更好的资源利用率,而不是原始性能。

总之,如果您的关注点围绕着优化 CPU/线程利用率,或者如果您能够同时运行多个调用,那么采用异步可能是有益的。另一方面,如果这些条件不适用,则与同步编程相比,使用异步编程可能没有显著优势。

在谈到与处置上下文相关的问题时,请提供有关代码的更多详细信息。

评论

0赞 Muhammad Bilal 6/5/2023
Adalyat Nazirov 感谢您的简要解释,关于数据库上下文,我正在调用一个外部方法表单存储库,其中注入了数据库上下文。如果我不使外部方法异步等待,它会给出“无法访问已处置的上下文实例”。但是,如果我让它异步等待,那么它就可以正常工作。由于外部方法是异步等待的,我必须使存储库方法和 API 控制器方法异步等待。这就是为什么我担心这是否是好方法的原因。
0赞 Adalyat Nazirov 6/5/2023
@MuhammadBilal你得到的异常看起来像一个错误。当前问题由主持人关闭,请就该问题创建一个新问题,提供尽可能多的详细信息,包括代码片段。