From b4c2c7ce8a6cf33fe441ee6e4d9311e701f56856 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Sat, 2 Aug 2025 21:50:36 +1000 Subject: [PATCH] Refactor BuildService --- .../Features/Build/BuildManagerExtensions.cs | 20 +++++++++++++++++ .../Features/Build/BuildService.cs | 22 +++++-------------- 2 files changed, 25 insertions(+), 17 deletions(-) create mode 100644 src/SharpIDE.Application/Features/Build/BuildManagerExtensions.cs diff --git a/src/SharpIDE.Application/Features/Build/BuildManagerExtensions.cs b/src/SharpIDE.Application/Features/Build/BuildManagerExtensions.cs new file mode 100644 index 0000000..b9d461f --- /dev/null +++ b/src/SharpIDE.Application/Features/Build/BuildManagerExtensions.cs @@ -0,0 +1,20 @@ +using Microsoft.Build.Execution; + +namespace SharpIDE.Application.Features.Build; + +public static class BuildManagerExtensions +{ + public static async Task BuildAsync(this BuildManager buildManager, BuildParameters buildParameters, BuildRequestData buildRequest) + { + var buildCompleteTcs = new TaskCompletionSource(); + buildManager.BeginBuild(buildParameters); + var buildSubmission = buildManager.PendBuildRequest(buildRequest); + buildSubmission.ExecuteAsync(test => + { + buildCompleteTcs.SetResult(test.BuildResult!); + }, null); + var buildResult = await buildCompleteTcs.Task.ConfigureAwait(false); + buildManager.EndBuild(); + return buildResult; + } +} diff --git a/src/SharpIDE.Application/Features/Build/BuildService.cs b/src/SharpIDE.Application/Features/Build/BuildService.cs index 112f2e2..1c91ab1 100644 --- a/src/SharpIDE.Application/Features/Build/BuildService.cs +++ b/src/SharpIDE.Application/Features/Build/BuildService.cs @@ -48,23 +48,11 @@ public class BuildService hostServices: null, flags: BuildRequestDataFlags.None); - await Task.Run(async () => - { - await BuildStarted.Invoke().ConfigureAwait(false); - var buildCompleteTcs = new TaskCompletionSource(); - BuildManager.DefaultBuildManager.BeginBuild(buildParameters); - var buildResult2 = BuildManager.DefaultBuildManager.PendBuildRequest(buildRequest); - var timer = Stopwatch.StartNew(); - buildResult2.ExecuteAsync((BuildSubmission test) => - { - buildCompleteTcs.SetResult(test.BuildResult!); - }, null); - //var buildResult = BuildManager.DefaultBuildManager.Build(buildParameters, buildRequest); // This is a convenience to essentially do the same thing. - var buildResult = await buildCompleteTcs.Task.ConfigureAwait(false); - timer.Stop(); - BuildManager.DefaultBuildManager.EndBuild(); - Console.WriteLine($"Build result: {buildResult.OverallResult} in {timer.ElapsedMilliseconds}ms"); - }).ConfigureAwait(false); + await BuildStarted.Invoke().ConfigureAwait(false); + var timer = Stopwatch.StartNew(); + var buildResult = await BuildManager.DefaultBuildManager.BuildAsync(buildParameters, buildRequest).ConfigureAwait(false); + timer.Stop(); + Console.WriteLine($"Build result: {buildResult.OverallResult} in {timer.ElapsedMilliseconds}ms"); } private static string[] TargetsToBuild(BuildType buildType)