Постоянно запускать задачи в фоновом режиме в консольном приложении - PullRequest
1 голос
/ 26 февраля 2020

Я начну с описания того, чего я хочу достичь. Идея состоит в том, что у меня есть несколько объектов класса с разными таймерами. Когда таймер для объекта заканчивается, я хочу, чтобы этот объект напечатал сообщение на консоль, а затем сбросил таймер. Я хотел бы, чтобы это выполнялось в фоновом режиме, чтобы мое приложение могло продолжать работать, пока эти несколько таймеров работают в фоновом режиме.

Например, инициализировать так (где аргумент - это таймер в секундах):

BackGroundTimer timer1 = new BackGroundTimer(1);
BackGroundTimer timer2 = new BackGroundTimer(2);
BackGroundTimer timer3 = new BackGroundTimer(3);

Console.ReadLine();

Где Console.ReadLine () символизирует текущую работу. Тогда в идеале я хотел бы иметь следующие выходные данные:

0:

1: Timer1

2: Timer1 Timer2

3: Timer1 Таймер3

4: Таймер1 Таймер2

Можно ли этого достичь?

1 Ответ

3 голосов
/ 26 февраля 2020

Взгляните на Таймер класса. Вы можете указать период в его конструкторе, и он будет периодически вызывать указанный метод.

Редактировать: Пример кода ниже

static void Main(string[] args)
{
    Timer timer1 = new Timer(1000)
    {
        Enabled = true,
        AutoReset = true
    };

    Timer timer2 = new Timer(2000)
    {
        Enabled = true,
        AutoReset = true
    };

    Timer timer3 = new Timer(3000)
    {
        Enabled = true,
        AutoReset = true
    };

    timer1.Elapsed += async (sender, e) => await HandleTimer("Timer1");
    timer2.Elapsed += async (sender, e) => await HandleTimer("Timer2");
    timer3.Elapsed += async (sender, e) => await HandleTimer("Timer3");

    Console.ReadLine();
}

private static async Task HandleTimer(string message)
{
    Console.WriteLine(message);
}
...