В .NET есть два таймера общего назначения:
Этот класс позволяет непрерывно вызывать делегата через определенные промежутки времени. Вы также можете использовать этот класс для планирования одного вызова делегата в указанный интервал времени. Делегат выполняется в потоке ThreadPool.
Пример:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
private static Timer timer;
static void Main(string[] args)
{
timer = new Timer(
callback: new TimerCallback(TimerTask),
state: /* your state object here */,
dueTime: 1000,
period: 2000);
Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: done.");
}
private static void TimerTask(object timerState)
{
Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: starting a new callback.");
//you can cast timerState to it's concrete type here
}
}
Еще один таймер, который можно использовать в многопоточной среде, — это System.Timers.Timer, который по умолчанию вызывает событие в потоке ThreadPool.
При создании объекта System.Timers.Timer можно указать временной интервал, в течение которого должно вызываться событие Elapsed. Используйте свойство Enabled, чтобы указать, должен ли таймер вызывать событие Elapsed. Если вам нужно, чтобы событие Elapsed возникало только один раз по истечении указанного интервала, установите для параметра AutoReset значение false. Значение по умолчанию для свойства AutoReset равно true, что означает, что событие Elapsed возникает регулярно с интервалом, заданным свойством Interval.
Вы можете начать читать отсюда: https://docs.microsoft.com/en-us/dotnet/standard/threading/timers
Итак, вы хотите иметь возможность вводить текст в консоль, пока какой-то текст выводится на экран?