public static async Task RunMainMenuAndWaitForCompletion(string title = "Lakerfield Main Console Menu", Action <ConsoleMenu> addMenuItems = null, bool onlyExitWhenPressingQuit = true) { var cancellationTokenSource = new CancellationTokenSource(); var cancellationToken = cancellationTokenSource.Token; var tasks = new List <Task>(); var menu = new ConsoleMenu( (task) => tasks.Add(task), cancellationToken, title); addMenuItems?.Invoke(menu); if (onlyExitWhenPressingQuit) { menu.Add(ConsoleKey.Q, "Quit", () => { cancellationTokenSource.Cancel(); return(Task.CompletedTask); }); while (!cancellationToken.IsCancellationRequested) { await menu.Run(); if (cancellationToken.IsCancellationRequested) { break; } Console.WriteLine(); Console.WriteLine($@"Exit prevented, to quit Q must be pressed"); } } else { await menu.Run(); } tasks = tasks.Where(t => !t.IsCompleted).ToList(); Console.WriteLine($"Waiting for completion of {tasks.Count} tasks..."); await Task.WhenAll(tasks); }
public Task RunSubMenu(ConsoleMenu subMenu) { return(RunTask(subMenu.Run())); }