我今天从 Steve Smith 的 PluralSight 课程中学到:AspNet Core 6 Web API:建议在 WebService 上尽可能使用异步的最佳实践。
如果我没记错的话,在 C# ASP.NET 中,新的 WebService 请求会影响工作线程,并且没有 UI 等待刷新。
我不明白为什么当请求是同步的并且只需要一个线程时我应该使用await?如果我已经遇到了一个工作线程,其中没有需要响应的 UI,那么为什么 await 更可取?添加线程切换会增加处理请求的最终时间吗?
我知道并行工作需要线程(或任务)。但我不认为等待对于不需要并行性的请求有意义。如果等待的作业需要很长时间并且线程除了等待作业在继续之前执行之外不会做任何事情,为什么要使用“异步”?
我错过了一些东西,但我不知道是什么?
使用异步时应考虑两种类型的工作负载 - CPU 密集型和 IO 密集型(异步编程场景:识别 CPU 密集型和 I/O 密集型工作)。
CPU 限制通常意味着代码的执行主要依赖于 CPU。例如,将 PI 的数字计算到一定长度将受到 CPU 限制。这是使用
async
适合 UI 场景以保持应用程序响应时的“转到”情况。
另一方面,IO 绑定意味着执行依赖于某些输入/输出系统,例如读取文件时的磁盘驱动器或在访问数据库(或另一个 HTTP 请求)等资源时的网络适配器。这里的“转到”示例是从数据库读取数据的 Web 服务。这里的目标不是响应能力而是“性能”(实际上是吞吐量 - 在等待 IO 响应时不会阻塞服务器线程,它可以为 Web 服务提供其他请求,这可以对服务器可以处理的负载产生积极影响)。显然,如果不需要 IO 操作来处理某些 Web 请求,那么使端点(控制器或最小 API 处理程序中的操作)异步没有任何好处(它甚至会对性能产生负面影响,但在大多数情况下效果可以忽略不计)。
了解更多: