private Task <HostCompilationStartAnalysisScope> GetCompilationAnalysisScopeCoreAsync( AnalyzerAndOptions analyzerAndOptions, HostSessionStartAnalysisScope sessionScope, AnalyzerExecutor analyzerExecutor) { Func <Compilation, Task <HostCompilationStartAnalysisScope> > getTask = comp => { return(Task.Run(async() => { var compilationAnalysisScope = new HostCompilationStartAnalysisScope(sessionScope); await analyzerExecutor.ExecuteCompilationStartActionsAsync(sessionScope.CompilationStartActions, compilationAnalysisScope).ConfigureAwait(false); return compilationAnalysisScope; }, analyzerExecutor.CancellationToken)); }; var callback = new ConditionalWeakTable <Compilation, Task <HostCompilationStartAnalysisScope> > .CreateValueCallback(getTask); var compilationActionsMap = _compilationScopeMap.GetOrAdd(analyzerAndOptions, new ConditionalWeakTable <Compilation, Task <HostCompilationStartAnalysisScope> >()); return(compilationActionsMap.GetValue(analyzerExecutor.Compilation, callback)); }