private async Task ProcessCompilationCompletedAsync(CompilationCompletedEvent endEvent, CancellationToken cancellationToken) { try { // Execute analyzers in parallel. var tasks = ArrayBuilder <Task> .GetInstance(); foreach (var analyzerAndActions in _compilationEndActionsMap) { var task = Task.Run(() => { // Execute actions for a given analyzer sequentially. analyzerExecutor.ExecuteCompilationEndActions(analyzerAndActions.Value); }, cancellationToken); tasks.Add(task); } await Task.WhenAll(tasks.ToArrayAndFree()).ConfigureAwait(false); } finally { endEvent.FlushCache(); } }