0

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

4

1 回答 1

3

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

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

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

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

于 2013-10-26T04:31:43.550 回答