代码之家  ›  专栏  ›  技术社区  ›  Mike Chamberlain

analysisContext.enableConcurrentexExecution()-它到底做了什么?

  •  2
  • Mike Chamberlain  · 技术社区  · 6 年前

    我读过这个方法的 documentation 但细节上却相当浅显。

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

    什么是并发执行的?说我有:

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

    如果正在分析的代码包含多个invocationExpression,那么每个表达式将在其自己的线程上被并发分析吗?

    然而,这样的分析器必须确保其操作能够正确地并行执行。

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

    启用并发执行有什么缺点吗?

    还是我完全误解了?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Kris Vandermotten    6 年前

    如果正在分析的代码包含多个invocationExpression,那么每个表达式将在其自己的线程上被并发分析吗?

    事实上,他们可能是。显然不能保证它们是,只有这么多线程。

    什么构成“行动”

    “action”是一个委托,您可以使用以下方法注册它 RegisterSyntaxNodeAction .

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

    对。

    启用并发执行有什么缺点吗?

    如果您的操作是读写共享状态,那么您要么必须同步这些访问,要么不启用并发执行。