await / async如何工作?

时间:2013-04-01 02:08:21

标签: multithreading async-await

假设线程A使用'await'等待线程B上的某些事情完成。当B忙于工作负载时,A被认为已被标记为'暂停点'。并且A中的执行流将继续使用被挂起的代码块的“调用者”方法。当B完成时,它将通知A从暂停点继续。

我的问题是:

  • 为暂停点保留的上下文信息的内容是什么?

  • 如何存储上下文信息?

  • B如何通知A有关它的完成情况?

  • A的上下文信息如何恢复? (我想一旦A的上下文信息恢复,A将自然地从暂停点恢复)

  • 'async'和'await'分别对编译器有什么影响。换句话说,编辑器幕后做了什么特别的工作。

1 个答案:

答案 0 :(得分:3)

首先,忘记线程。 asyncawait与线程很少有关,而且与重写方法有很多关系,因此您可以更轻松地使用延续传递样式。

我建议你阅读我的async/await intro post,然后跟进MSDN documentation(非常好)。除了最后一个问题,这将回答您的所有问题,最好由Jon Skeet's eduasync blog series回答。