public Task Start() { State = ApplicationState.Running; Nito.AsyncEx.AsyncContext.Run(async() => { await logic.Initialize(); loop.Start(); while (State == ApplicationState.Running && output.IsOpen) { await dispatcher.DispatchPendingEvents(); await logic.Update(); await output.Update(); State = await loop.Next(); } await logic.Shutdown(); output.Close(); }); return(Task.CompletedTask); }