【发布时间】:2016-03-03 06:26:03
【问题描述】:
https://msdn.microsoft.com/en-us/magazine/gg598924.aspx
这是一篇很棒的文章,我知道无法涵盖所有细节,因为这基本上涉及粘贴 .NET 框架的源代码。所以引用正文:
每个线程都有一个当前上下文。 如果“Current”为空,则线程的当前上下文为 按照惯例,“new SynchronizationContext()”。
然而,另一方面:
默认情况下,当前的 SynchronizationContext 在等待时被捕获 点,并且这个 SynchronizationContext 用于在 await (更准确地说,它捕获当前的 SynchronizationContext 除非它是 null,在这种情况下它会捕获当前 任务调度器)
这两个陈述几乎相互矛盾,所以我认为这是作者所做的一些简化的结果(我很好)。
谁能解释一下? Code 可能有助于回答我的问题(查找 syncCtx 变量),这段代码与第二个引用有关。
【问题讨论】:
-
这并不矛盾 - 同步上下文 可以 为空 - 只是为了继续处理,没有任务调度程序的空同步上下文等效于 @987654325 @。 “按照惯例”只是捕获同步上下文的处理方式,它不是禁止空同步上下文的规则。至于代码,它是公开的——referencesource.microsoft.com/#mscorlib/system/threading/…。
标签: c# multithreading synchronizationcontext