让任务在控制台应用程序中永久在后台运行

时间:2020-02-26 12:42:01

标签: c# async-await console-application

我将从描述我要实现的目标开始。我的想法是,我有一个类的多个对象,它们具有各自不同的计时器。当对象的计时器用尽时,我希望该对象将消息打印到控制台,然后重置计时器。我希望它在后台运行,以便我的应用程序可以在这些多个计时器在后台运行时继续工作。

例如这样的初始化(其中参数是计时器,以秒为单位):

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 Timer3

4:Timer1 Timer2

这有可能实现吗?

1 个答案:

答案 0 :(得分:3)

看看Timer类。您可以在其构造函数中指定句点,它将定期调用指定的方法。

编辑:下面的代码示例

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);
}