如何使用具有不同dealys的计时器无限期地运行异步任务

时间:2017-03-29 23:55:07

标签: c# asynchronous timer task .net-4.6

我正在开发一个控制台应用程序。我组织了任务中的常见操作。每个任务(比如task1,task2,task3)应该根据自己的延迟无限期运行(例如,每5分钟一次task1,每小时一次task2,每天一次task3)。当用户关闭应用程序时,它应该等待所有正在运行的任务完成并且所有待处理的任 问题是我不知道如何以适当的方式做到这一点。我尝试了类似下面的代码,但主进程一到达t1.Start()就行了。这是预期的行为,但我完全不知道如何继续。

class Program
{
    static void Main(string[] args)
    {
        string path = @"config.json";
        Config config = ConfigParser.Parse(path);

        TimerTask t1 = new TimerTask(async () => await Task1(config), 300000);
        t1.Start();
    }
}

private static async Task Task1(Config config)
{
    // read from a database
    // call external service
    // write to the database
}    

public class TimerTask
{
    private readonly Timer taskTimer;

    public TimerTask(Action action, int interval = 10000)
    {
        taskTimer = new Timer { AutoReset = true, Interval = interval };
        taskTimer.Elapsed += (_, __) => action();
    }

    public void Start() { taskTimer.Start(); }

    public void Stop() { taskTimer.Stop(); }
}

0 个答案:

没有答案