Update BuildAsync method

This commit is contained in:
Matt Parker
2025-08-02 23:02:08 +10:00
parent 0224394ea8
commit 95cee5d6b5

View File

@@ -4,17 +4,39 @@ namespace SharpIDE.Application.Features.Build;
public static class BuildManagerExtensions
{
public static async Task<BuildResult> BuildAsync(this BuildManager buildManager, BuildParameters buildParameters, BuildRequestData buildRequest)
/// <summary>
/// Convenience method. Submits a lone build request and returns a Task that will complete when results are available.
/// </summary>
/// <exception cref="InvalidOperationException">Thrown if a build is already in progress.</exception>
public static async Task<BuildResult> BuildAsync(this BuildManager buildManager, BuildParameters parameters, BuildRequestData requestData)
{
var buildCompleteTcs = new TaskCompletionSource<BuildResult>();
buildManager.BeginBuild(buildParameters);
var buildSubmission = buildManager.PendBuildRequest(buildRequest);
buildSubmission.ExecuteAsync(submission =>
BuildResult result;
buildManager.BeginBuild(parameters);
try
{
buildCompleteTcs.SetResult(submission.BuildResult!);
}, null);
var buildResult = await buildCompleteTcs.Task.ConfigureAwait(false);
buildManager.EndBuild();
return buildResult;
var tcs = new TaskCompletionSource<BuildResult>(TaskCreationOptions.RunContinuationsAsynchronously);
try
{
var buildSubmission = buildManager.PendBuildRequest(requestData);
buildSubmission.ExecuteAsync(sub =>
{
var buildResult = sub.BuildResult!;
tcs.SetResult(buildResult);
}, null);
}
catch (Exception ex)
{
tcs.SetException(ex);
}
result = await tcs.Task.ConfigureAwait(false);
}
finally
{
buildManager.EndBuild();
}
return result;
}
}