【问题标题】:How does await/async work?等待/异步如何工作?
【发布时间】:2013-04-01 19:09:43
【问题描述】:

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

我的问题是:

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

  • 上下文信息如何存储?

  • B 如何通知 A 完成?

  • A 的上下文信息如何恢复? (我认为一旦 A 的上下文信息被恢复,A 就会“自然地”从暂停点恢复)

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

【问题讨论】:

    标签: multithreading async-await


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您提供的参考资料,由于时间关系,我目前只阅读了一些资料。我会花一些时间阅读链接。
    猜你喜欢
    • 2014-06-06
    • 2019-01-13
    • 1970-01-01
    • 2021-10-27
    • 2013-07-03
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多