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 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>(); BuildResult result;
buildManager.BeginBuild(buildParameters); buildManager.BeginBuild(parameters);
var buildSubmission = buildManager.PendBuildRequest(buildRequest); try
buildSubmission.ExecuteAsync(submission =>
{ {
buildCompleteTcs.SetResult(submission.BuildResult!); var tcs = new TaskCompletionSource<BuildResult>(TaskCreationOptions.RunContinuationsAsynchronously);
}, null);
var buildResult = await buildCompleteTcs.Task.ConfigureAwait(false); try
buildManager.EndBuild(); {
return buildResult; 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;
} }
} }