AnalysisContext.EnableConcurrentExecution()-它到底是做什么的?

时间:2018-09-18 11:52:24

标签: c# roslyn roslyn-code-analysis

我已经阅读了此方法的documentation,但在细节上相当轻巧。

  

启用并发执行此分析器注册的分析器动作。

究竟是什么同时执行?说我有:

public override void Initialize(AnalysisContext context)
{
    context.EnableConcurrentExecution();
    context.RegisterSyntaxNodeAction(AnalyzeNode, SyntaxKind.InvocationExpression);
}

如果所分析的代码包含多个InvocationExpressions,是否将在其自己的线程上同时分析每个表达式?

  

但是,这样的分析器必须确保其动作可以并行正确执行。

什么构成“动作”?如何确保其“正确执行”?我的AnalyzeNode方法是static,从不可变状态读取,并且不写入任何共享状态。这样够了吗?

启用并发执行是否有缺点?

还是我完全误解了?

1 个答案:

答案 0 :(得分:2)

  

如果所分析的代码包含多个InvocationExpressions,是否将在其自己的线程上同时分析每个表达式?

的确如此。显然,不能保证它们只有线程太多。

  

什么构成“动作”

“动作”是您使用RegisterSyntaxNodeAction之类的方法注册的委托。

  

我的AnalyzeNode方法是static,它从不可变状态读取,并且不写入任何共享状态。这样够了吗?

是的

  

启用并发执行是否有缺点?

如果要从共享状态读取和写入操作,则要么必须同步这些访问,要么不启用并发执行。