异步代码对单线程工作应用程序有好处吗?

Ale*_*nko 3 c# .net-core

我的任务是容器化遗留控制台工作应用程序,我在各处使用 async\await 重写了该应用程序。我的上级质疑我的选择,因为没有理由将其引入到独立的单线程应用程序中,因为线程池不太可能耗尽。我没有答案来证明使用它的合理性,除了它是相当长一段时间以来编写代码的标准方法之外。它有什么实质性的好处吗?

Mar*_*ell 8

async/await 主要帮助解决可扩展性,并且在大规模并发系统(Web 服务器等)上特别有用。此功能确实有一些(通常很小)开销(异步/等待中涉及的额外语义 - 状态机、重新激活等)。在并发系统中,这种开销只需付出少量的代价即可获得巨大的回报(释放线程),因此完全值得。

然而,在单线程控制台应用程序中,如果 CPU 在等待时没有做任何其他有用的事情,那么可能不会有任何巨大的直接好处。您添加的额外开销是否重要取决于具体情况,并且需要进行测量才能发现。我会说“可能没有影响,但有可能会产生轻微的负面影响”。

但是,您可能仍然有一些优势:

  • 您现在可以使用异步 API,并且 API 越来越多地变为异步优先或仅异步
  • 如果您想将代码迁移到更拥挤的环境,那么您处于有利位置