Действие выполнять в отдельном методе, а потом просто вызвать этот метод повторно. Примерно так:
static Action lastAction = null;
static void AnyAction()
{
Console.WriteLine("Выполняю какое-то действие. Не отключайтесь...");
Thread.Sleep(3000);
}
static void Repeat()
{
Console.WriteLine("Хотите повторить? [Д/н]");
if (char.ToUpper(Console.ReadKey().KeyChar) == 'Д')
{
Console.WriteLine();
lastAction();
Repeat();
}
}
static void Main(string[] args)
{
lastAction = AnyAction;
lastAction();
Repeat();
}
Или использовать очереди и добавлять действие в очередь при необходимости выполнить повтор:
static Queue<Action> actions = new Queue<Action>();
static void AnyAction()
{
Console.WriteLine("Выполняю какое-то действие. Не отключайтесь...");
Thread.Sleep(3000);
}
static void Main(string[] args)
{
actions.Enqueue(AnyAction);
while (actions.Count > 0)
{
actions.Dequeue()();
Console.WriteLine("Хотите повторить? [Д/н]");
if (char.ToUpper(Console.ReadKey().KeyChar) == 'Д')
{
Console.WriteLine();
actions.Enqueue(AnyAction);
}
}
}