static async Task RunAndWait(HostArguments args) { using (var service = new Host { ServiceName = args.ServiceName }) { var completionSource = new TaskCompletionSource <bool>(TaskCreationOptions.RunContinuationsAsynchronously); service.OnStopping = () => { service.OnStopping = () => { }; completionSource.TrySetResult(true); }; service.Run(args.Portable || Environment.UserInteractive); var r = new CancelWrapper(completionSource, service); Console.CancelKeyPress += r.ConsoleOnCancelKeyPress; Console.WriteLine("Press Ctrl+C to exit"); await completionSource.Task.ConfigureAwait(false); } }
void RunAndWait(HostArguments args) { using (var service = new Host { ServiceName = args.ServiceName }) { using (var waitHandle = new ManualResetEvent(false)) { service.OnStopping = () => { service.OnStopping = () => { }; waitHandle.Set(); }; service.Run(args.Portable || Environment.UserInteractive); var r = new CancelWrapper(waitHandle, service); Console.CancelKeyPress += r.ConsoleOnCancelKeyPress; Console.WriteLine("Press Ctrl+C to exit"); waitHandle.WaitOne(); } } }