コード例 #1
0
        private async Task ExecuteCompilationActionsAsync(ImmutableDictionary <DiagnosticAnalyzer, ImmutableArray <CompilationAnalyzerAction> > compilationActionsMap, CancellationToken cancellationToken)
        {
            // Execute analyzers in parallel.
            var tasks = ArrayBuilder <Task> .GetInstance();

            foreach (var analyzerAndActions in compilationActionsMap)
            {
                var task = Task.Run(() =>
                {
                    // Execute actions for a given analyzer sequentially.
                    analyzerExecutor.ExecuteCompilationActions(analyzerAndActions.Value);
                }, cancellationToken);

                tasks.Add(task);
            }

            await Task.WhenAll(tasks.ToArrayAndFree()).ConfigureAwait(false);
        }