public async Task Run(string[] args) { _logger.Log("Starting Application"); ExtendedConsole.PrintHelpText(); while (!_cts.IsCancellationRequested) { var key = Console.ReadKey(); ExtendedConsole.BlankLine(); switch (key.Key) { case ConsoleKey.W: //This could be for example on an event or message received from RabbitMQ, etc... await _finiteStateMachine.TriggerAction(TransportActions.WakeUp); break; case ConsoleKey.T: await _finiteStateMachine.TriggerAction(TransportActions.TakeTrain); break; case ConsoleKey.S: await _finiteStateMachine.TriggerAction(TransportActions.FallAsleep); break; case ConsoleKey.L: _logger.Log(_finiteStateMachine.GetCurrentState()); break; case ConsoleKey.Escape: case ConsoleKey.E: _cts.Cancel(); break; default: Console.WriteLine($"You Pressed {key.Key}"); ExtendedConsole.PrintHelpText(); ExtendedConsole.BlankLine(); break; } } _logger.Log($"Closing Application"); }