我已经阅读了此方法的documentation,但在细节上相当轻巧。
启用并发执行此分析器注册的分析器动作。
究竟是什么同时执行?说我有:
public override void Initialize(AnalysisContext context)
{
context.EnableConcurrentExecution();
context.RegisterSyntaxNodeAction(AnalyzeNode, SyntaxKind.InvocationExpression);
}
如果所分析的代码包含多个InvocationExpressions,是否将在其自己的线程上同时分析每个表达式?
但是,这样的分析器必须确保其动作可以并行正确执行。
什么构成“动作”?如何确保其“正确执行”?我的AnalyzeNode
方法是static
,从不可变状态读取,并且不写入任何共享状态。这样够了吗?
启用并发执行是否有缺点?
还是我完全误解了?
答案 0 :(得分:2)
如果所分析的代码包含多个InvocationExpressions,是否将在其自己的线程上同时分析每个表达式?
的确如此。显然,不能保证它们只有线程太多。
什么构成“动作”
“动作”是您使用RegisterSyntaxNodeAction
之类的方法注册的委托。
我的
AnalyzeNode
方法是static
,它从不可变状态读取,并且不写入任何共享状态。这样够了吗?
是的
启用并发执行是否有缺点?
如果要从共享状态读取和写入操作,则要么必须同步这些访问,要么不启用并发执行。