.net 同时使用不同的AdhocWorkspace实例安全吗?
我面临的情况是,我希望在多个线程(>每个线程一个单独的实例)中同时使用.net 同时使用不同的AdhocWorkspace实例安全吗?,.net,roslyn,roslyn-code-analysis,.net,Roslyn,Roslyn Code Analysis,我面临的情况是,我希望在多个线程(>每个线程一个单独的实例)中同时使用Microsoft.CodeAnalysis.AdhocWorkspace()的不同实例(而不是一个共享实例) 在查看AdhocWorkspace的默认构造函数时,有一件事让我印象深刻,那就是它总是在幕后使用静态MefHostServices实例: public AdhocWorkspace():此(Host.Mef.MefHostServices.DefaultHost) 这让我很好奇,我做了一些研究,以找出几个并发的Ad
Microsoft.CodeAnalysis.AdhocWorkspace
()的不同实例(而不是一个共享实例)
在查看AdhocWorkspace
的默认构造函数时,有一件事让我印象深刻,那就是它总是在幕后使用静态MefHostServices
实例:
public AdhocWorkspace():此(Host.Mef.MefHostServices.DefaultHost)
这让我很好奇,我做了一些研究,以找出几个并发的AdhocWorkspace
s是否会导致任何问题
结果:
- 我找不到任何明确说明它是否安全的文档
- 我发现了一些老的github问题,比如和,它们正在讨论并发性问题。特别是后一个,听起来只要我们只使用一个主机服务就可以了(默认构造函数就是这样),尽管我不确定这是否与我的情况相关
- 实际上,我尝试过并行使用大量的
s(添加文档、项目和编译),到目前为止没有遇到任何问题AdhocWorkspace
注意:我对MEF不是很熟悉,所以如果我缺乏MEF知识,我自己回答这个问题可能会更容易。一次使用多个工作区绝对不错。从主机服务共享的服务可能是无状态的(因此无需担心竞争条件),或者如果它们正在维护状态,则可以安全地这样做。一次使用多个工作区是绝对正确的。从主机服务共享的服务可能是无状态的(因此无需担心竞争条件),或者如果它们正在维护状态,则可以安全地这样做