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); }