【问题标题】:What all is stored when we say synchronization context is stored?当我们说存储了同步上下文时,存储了什么?
【发布时间】:2021-07-31 04:06:28
【问题描述】:

当遇到 await 时,控制权传递给调用者,而 awaited 调用等待响应。

在将控制权传递给调用者之前,会存储同步上下文。

在 Windows 应用程序的情况下,同步上下文是主 UI 线程。因此,当等待完成时,保存的上下文将被恢复,等待下面的其余代码将使用原始同步上下文执行。

我想问一下,所有项目都存储在同步上下文中。例如:

  1. 当前线程

  2. 局部变量值

  3. 还有什么?

【问题讨论】:

  • 我很确定答案没有什么有趣的(与存储请求和文化的 ASP.Net 应用程序不同),可能会保留一些跟踪 ID...看看您对示例的推理会很有趣存储-“当前线程”(因为它始终是同一个主 UI 线程)或“局部变量”(因为实际上没有异步部分开始时原始方法返回/完成)

标签: c# asynchronous async-await


【解决方案1】:

SynchronizationContext 中没有存储任何内容。 SynchronizationContext 本身由asynchronous state machine 捕获和存储,并通过调用其Post 方法在适当的时候使用。本地状态与捕获的上下文一起存储在异步状态机中。

【讨论】:

  • 局部变量和全局变量呢?
  • @variable 处理本地和全局状态不是SynchronizationContext 的业务。这个类只知道代表。它接受一个委托并知道何时何地调用它。
  • 委托是指等待之后的代码吗?
  • @variable 基本上是的。
  • 谁存储了本地和全局状态信息,以便在它恢复时知道状态是什么。
猜你喜欢
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 2011-10-18
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多