Refactor BuildService

This commit is contained in:
Matt Parker
2025-08-02 21:50:36 +10:00
parent 91ea2c77c3
commit b4c2c7ce8a
2 changed files with 25 additions and 17 deletions

View File

@@ -0,0 +1,20 @@
using Microsoft.Build.Execution;
namespace SharpIDE.Application.Features.Build;
public static class BuildManagerExtensions
{
public static async Task<BuildResult> BuildAsync(this BuildManager buildManager, BuildParameters buildParameters, BuildRequestData buildRequest)
{
var buildCompleteTcs = new TaskCompletionSource<BuildResult>();
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;
}
}

View File

@@ -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<BuildResult>();
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)