我正在开发一个控制台应用程序。我组织了任务中的常见操作。每个任务(比如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(); }
}