diff --git a/src/Workspaces/Core/Portable/Workspace/Solution/SolutionState.CompilationTracker.cs b/src/Workspaces/Core/Portable/Workspace/Solution/SolutionState.CompilationTracker.cs index 363e86c114c36fe6de7e86ae5828ecc414adca74..2e73faf67851ea0db93386880bfc6a4fb60e3420 100644 --- a/src/Workspaces/Core/Portable/Workspace/Solution/SolutionState.CompilationTracker.cs +++ b/src/Workspaces/Core/Portable/Workspace/Solution/SolutionState.CompilationTracker.cs @@ -307,27 +307,16 @@ public Task GetCompilationAsync(SolutionState solution, Cancellatio } else { - var taskCompletionSource = new TaskCompletionSource(); - GetOrBuildCompilationInfoAsync(solution, lockGate: true, cancellationToken: cancellationToken) - .ContinueWith(t => - { - if (t.IsCanceled || cancellationToken.IsCancellationRequested) - { - taskCompletionSource.SetCanceled(); - } - else if (t.IsFaulted) - { - taskCompletionSource.SetException(t.Exception.InnerExceptions); - } - else - { - taskCompletionSource.SetResult(t.Result.Compilation); - } - }, CancellationToken.None, TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default); - return taskCompletionSource.Task; + return GetCompilationSlowAsync(solution, cancellationToken); } } + private async Task GetCompilationSlowAsync(SolutionState solution, CancellationToken cancellationToken) + { + var compilationInfo = await GetOrBuildCompilationInfoAsync(solution, lockGate: true, cancellationToken: cancellationToken).ConfigureAwait(false); + return compilationInfo.Compilation; + } + private static string LogBuildCompilationAsync(ProjectState state) { return string.Join(",", state.AssemblyName, state.DocumentIds.Count);