我有一个功能需要在每个午夜存档 90 天前的电子邮件。我创建了一个类来处理这个问题,示例如下:
public void processArchives()
{
initializeTimer();
}
private void initializeTimer()
{
var now = DateTime.Now;
var tomorrow = now.AddDays(1);
var durationUntilMidnight = tomorrow.Date - now;
var t = new Timer(o => { attemptArchivalProcess(); }, null, TimeSpan.Zero, durationUntilMidnight);
}
private void attemptArchivalProcess()
{
//perform archival
initializeTimer(); //re-start timer to process tomorrow
}
问题是,对 initializeTimer 的重复调用会导致堆栈溢出(重复的函数调用)还是会“永远”运行良好?
并且我应该能够将 processArchives() 作为新线程调用,并保持线程打开,还是在 init 调用之后需要某种循环,例如:
while(!Program.Closing){ sleep(...); }
防止它被垃圾收集?