Skip to content

Instantly share code, notes, and snippets.

@AArnott
Created July 15, 2011 14:57
Show Gist options
  • Save AArnott/1084850 to your computer and use it in GitHub Desktop.
Save AArnott/1084850 to your computer and use it in GitHub Desktop.
Demonstrates the simple extension method required to enable the C# 5 await keyword for MSBuild builds
namespace MSBuildAwaiterSample
{
using System.Threading.Tasks;
using Microsoft.Build.Execution;
class Program
{
static void Main(string[] args)
{
}
internal static async Task<BuildResult> Build(BuildManager buildManager, BuildParameters parameters, BuildRequestData data)
{
buildManager.BeginBuild(parameters);
BuildSubmission submission = buildManager.PendBuildRequest(data);
BuildResult buildResult = await submission.ExecuteAsync();
buildManager.EndBuild();
return buildResult;
}
}
public static class BuildSubmissionAwaitExtensions
{
public static Task<BuildResult> ExecuteAsync(this BuildSubmission submission)
{
var tcs = new TaskCompletionSource<BuildResult>();
submission.ExecuteAsync(SetBuildComplete, tcs);
return tcs.Task;
}
private static void SetBuildComplete(BuildSubmission submission)
{
var tcs = (TaskCompletionSource<BuildResult>)submission.AsyncContext;
tcs.SetResult(submission.BuildResult);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment