同时使用不同的 AdhocWorkspace 实例是否安全?

Is it safe to use different AdhocWorkspace instances concurrently?

我面临这样一种情况,我想使用 不同的实例 不是 一个共享实例) Microsoft.CodeAnalysis.AdhocWorkspace (docs) 在多个线程中并发(=> 每个线程一个单独的实例)。

在查看 AdhocWorkspace 的默认构造函数时,让我印象深刻的一件事是它总是在幕后使用静态 MefHostServices 实例:

public AdhocWorkspace() : this(Host.Mef.MefHostServices.DefaultHost)

这让我很好奇,我做了一些研究,以了解多个并发 AdhocWorkspace 是否会导致任何问题。

结果:

结论: 虽然到目前为止看起来还不错,但我会对它的实际设计原理感兴趣。特别是在可能出现竞争条件的情况下,我不想依赖快速测试和一些没有明确结果的研究。

也许有人可以指点我相关的文档或代码?甚至 roslyn 团队成员也可以提供一些说明?

注意:我对 MEF 不是很熟悉,所以如果我对 MEF 知识不足,也许我自己回答这个问题会更容易。

同时使用多个工作区绝对没问题。从主机服务共享的服务应该是无状态的(因此无需担心竞争条件),或者如果它们保持状态,则可以安全地保持状态。