From eb972173e1f661787f03ef0e7285a38f0ad34584 Mon Sep 17 00:00:00 2001 From: azyobuzin Date: Fri, 19 May 2017 17:33:35 +0900 Subject: [PATCH] Use async/await in SolutionState.CompilationTracker.GetCompilationAsync https://github.com/dotnet/roslyn/pull/19620#discussion_r117289958 --- .../SolutionState.CompilationTracker.cs | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/src/Workspaces/Core/Portable/Workspace/Solution/SolutionState.CompilationTracker.cs b/src/Workspaces/Core/Portable/Workspace/Solution/SolutionState.CompilationTracker.cs index 363e86c114c..2e73faf6785 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); -- GitLab