public static ImmutableDictionary <ProjectId, CodeMetricsInfo> CountLinesInParallel(
            IEnumerable <Project> projects,
            Func <string, CodeMetricsCounter> counterFactory,
            CodeMetricsOptions options          = null,
            CancellationToken cancellationToken = default)
        {
            var codeMetrics = new ConcurrentBag <(ProjectId projectId, CodeMetricsInfo codeMetrics)>();

            Parallel.ForEach(projects, project =>
            {
                CodeMetricsCounter counter = counterFactory(project.Language);

                CodeMetricsInfo projectMetrics = (counter != null)
                    ? CountLinesAsync(project, counter, options, cancellationToken).Result
                    : CodeMetricsInfo.NotAvailable;

                codeMetrics.Add((project.Id, codeMetrics: projectMetrics));
            });
 public abstract CodeMetricsInfo CountLines(SyntaxNode node, SourceText sourceText, CodeMetricsOptions options, CancellationToken cancellationToken);