调用立即等待的异步方法时,性能影响有多大

本文关键字:影响 性能 等待 异步方法 调用 | 更新日期: 2023-09-27 18:36:53

许多API正在朝着只公开异步方法的方向发展。 在必须立即等待这些方法的情况下,性能会受到多大影响? 我假设它会导致当前线程等待生成的线程完成是错误的吗? 或者 CLR 是否在这些场景中执行某种魔术并使其全部在同一线程中执行?

调用立即等待的异步方法时,性能影响有多大

通过"异步方法",我假设你的意思是基于Task<T>异步方法。

因此,如果您有一个返回Task<T>的方法,并且您立即调用其 Wait() 方法,则会导致当前 等待内部WaitHandle对象。该任务最有可能在不同的线程上执行,并在完成后发出WaitHandle信号,从而释放等待线程。据我所知,没有编译器优化可以将此方案转换为同步调用。

当然,这比仅仅调用异步方法的同步等效项要多得多。但是,根据您的用例,可能不会有显着差异。

更重要的问题是,为什么要通过阻塞调用线程来失去异步的优势?这通常不是一个好主意,你应该确保你有一个很好的理由这样做。