Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 同时使用不同的AdhocWorkspace实例安全吗?_.net_Roslyn_Roslyn Code Analysis - Fatal编程技术网

.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问题,比如和,它们正在讨论并发性问题。特别是后一个,听起来只要我们只使用一个主机服务就可以了(默认构造函数就是这样),尽管我不确定这是否与我的情况相关
  • 实际上,我尝试过并行使用大量的
    AdhocWorkspace
    s(添加文档、项目和编译),到目前为止没有遇到任何问题
结论:虽然到目前为止它看起来不错,但我对它的实际设计方式很感兴趣。特别是在可能的比赛条件下,我不想依靠一个快速的测试和一点没有明确结果的研究

也许有人能给我指一段相关的文档或代码?或者甚至一个roslyn团队成员也能带来一些澄清


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

一次使用多个工作区绝对不错。从主机服务共享的服务可能是无状态的(因此无需担心竞争条件),或者如果它们正在维护状态,则可以安全地这样做。

一次使用多个工作区是绝对正确的。从主机服务共享的服务可能是无状态的(因此无需担心竞争条件),或者如果它们正在维护状态,则可以安全地这样做