提交 eb972173 编写于 作者: A azyobuzin

Use async/await in SolutionState.CompilationTracker.GetCompilationAsync

https://github.com/dotnet/roslyn/pull/19620#discussion_r117289958
上级 60cceb9f
...@@ -307,27 +307,16 @@ public Task<Compilation> GetCompilationAsync(SolutionState solution, Cancellatio ...@@ -307,27 +307,16 @@ public Task<Compilation> GetCompilationAsync(SolutionState solution, Cancellatio
} }
else else
{ {
var taskCompletionSource = new TaskCompletionSource<Compilation>(); return GetCompilationSlowAsync(solution, cancellationToken);
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;
} }
} }
private async Task<Compilation> 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) private static string LogBuildCompilationAsync(ProjectState state)
{ {
return string.Join(",", state.AssemblyName, state.DocumentIds.Count); return string.Join(",", state.AssemblyName, state.DocumentIds.Count);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册