许多 API 正朝着仅公开异步方法的方向发展。在您必须立即等待这些方法的情况下,性能会受到多少影响?假设它导致当前线程等待生成的线程完成,我错了吗?还是 CLR 在这些场景中执行某种魔法并使其全部在同一个线程中执行?
问问题
206 次
1 回答
3
通过“异步方法”,我假设您的意思是Task<T>
基于异步方法。
因此,如果您有一个返回 a 的方法Task<T>
并且您立即调用它的Wait()
方法,这会导致当前的 that 等待内部WaitHandle
对象。该任务很可能在不同的线程上执行并发出WaitHandle
完成时的信号,从而释放等待线程。没有编译器优化可以将此场景转换为我知道的同步调用。
这当然比调用异步方法的同步等效项要多。但是,根据您的用例,它可能不会有显着差异。
更重要的问题是你为什么要通过阻塞调用线程来失去异步的优势?这通常不是一个好主意,您应该确保您有充分的理由这样做。
于 2013-10-26T04:31:43.550 回答