static async Task <int> Main(string[] args) { var a = new AbsArguments(args); if (!a.IsValid()) { Console.WriteLine($"Usage: {Process.GetCurrentProcess().ProcessName} <args>"); Console.WriteLine($"Possible args: {string.Join(", ", AbsArguments.GetPossibleArgs())}"); return(-1); } using (var source = new CancellationTokenSource()) { Console.CancelKeyPress += (s, e) => source.Cancel(); try { Pi.Init <BootstrapWiringPi>(); if (a.Calibrate) { await CalibrateAsync(source.Token); } else { await RunAsync(a, source.Token); } return(0); } catch (TaskCanceledException) { Console.WriteLine("Bye!"); return(0); } catch (Exception e) { Console.WriteLine(e.GetType().FullName); Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); return(-1); } } }