@joebigelow / wix / commits / 1a69e7ed

Support async execution of commands

Rob Mensching committed Jun 8, 2020 at 16:27 UTC 1a69e7ed4156d15af0b0d479b1c99aa2358fbfc9
1 file changed +22 -8
src/wix/Program.cs
+22 -8
@@ -4,6 +4,8 @@ namespace WixToolset.Tools
4 {
5 using System;
6 using System.Runtime.InteropServices;
7 + using System.Threading;
8 + using System.Threading.Tasks;
9 using WixToolset.Converters;
10 using WixToolset.Core;
11 using WixToolset.Data;
@@ -23,17 +25,27 @@ namespace WixToolset.Tools
25 /// <param name="args">Commandline arguments for the application.</param>
26 /// <returns>Returns the application error code.</returns>
27 [MTAThread]
26 - public static int Main(string[] args)
28 + public static async Task<int> Main(string[] args)
29 {
28 - var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider()
29 - .AddConverter();
30 -
30 + var cts = new CancellationTokenSource();
31 var listener = new ConsoleMessageListener("WIX", "wix.exe");
32
33 + Console.CancelKeyPress += (s, e) =>
34 + {
35 + cts.Cancel();
36 + e.Cancel = true;
37 + };
38 +
39 try
40 {
35 - var program = new Program();
36 - return program.Run(serviceProvider, listener, args);
41 + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider()
42 + .AddConverter();
43 +
44 + return await Run(serviceProvider, listener, args, cts.Token);
45 + }
46 + catch (OperationCanceledException)
47 + {
48 + return -1;
49 }
50 catch (WixException e)
51 {
@@ -58,9 +70,11 @@ namespace WixToolset.Tools
70 /// Executes the wix command-line interface.
71 /// </summary>
72 /// <param name="serviceProvider">Service provider to use throughout this execution.</param>
73 + /// <param name="listener">Listener to use for the messaging system.</param>
74 /// <param name="args">Command-line arguments to execute.</param>
75 + /// <param name="cancellationToken">Cancellation token.</param>
76 /// <returns>Returns the application error code.</returns>
63 - public int Run(IWixToolsetServiceProvider serviceProvider, IMessageListener listener, string[] args)
77 + public static Task<int> Run(IWixToolsetServiceProvider serviceProvider, IMessageListener listener, string[] args, CancellationToken cancellationToken)
78 {
79 var messaging = serviceProvider.GetService<IMessaging>();
80 messaging.SetListener(listener);
@@ -72,7 +86,7 @@ namespace WixToolset.Tools
86 commandLine.ExtensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider, messaging, arguments.Extensions);
87 commandLine.Arguments = arguments;
88 var command = commandLine.ParseStandardCommandLine();
75 - return command?.Execute() ?? 1;
89 + return command?.ExecuteAsync(cancellationToken) ?? Task.FromResult(1);
90 }
91
92 private static IExtensionManager CreateExtensionManagerWithStandardBackends(IWixToolsetServiceProvider serviceProvider, IMessaging messaging, string[] extensions)