用于备份的计时器线程

本文关键字:线程 计时器 备份 用于 | 更新日期: 2023-09-27 18:27:42

如果我想每隔5分钟将一些东西保存到我的数据库中,并且我决定使用一个单独的线程(如果有更好的方法-启发我),那么什么会更好:

  • 只需创建线程并在睡眠状态下保持5分钟,然后让它调用Save函数,然后再次睡眠。或

  • 如果可能的话,可以使用Timer类(我还没有仔细研究过它)并用它做一些倒计时,而在时间结束时,调用Save函数,然后再次开始倒计时。或

  • 其他方式

附言:如果你喜欢,你可以给出代码示例。

用于备份的计时器线程

我建议使用System.Threading.Timer

在类中添加类型为System.Threading.Timer:的字段

private System.Threading.Timer _timer;

然后在类的构造函数中初始化它:

_timer = new Timer
(
    onSave, 
    null,  // State; not used.
    TimeSpan.FromMinutes(5),
    TimeSpan.FromMinutes(5)
);

然后添加一个onSave()并将您的保存逻辑放入其中:

private void onSave(object state)
{
    // Handle your save here.
}

你不想为了每五分钟回调一次而烧了整个线程。

使用计时器的另一个优点是,当程序想要关闭(或出于任何其他原因)时,可以更容易地取消计时器。如果你在Sleep()中有一个线程,那么取消Slep()并不容易!

要停止计时器运行,只需执行以下操作:

_timer.Change(-1, -1);

重新开始:

_timer.Change(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));

有关更多详细信息,请查看System.Threading.Timer的文档。

需要注意的一件事是,对onSave()的调用是否比计时器周期长。在这种情况下,您可能希望在onSave()开始时禁用计时器(通过调用_timer.Change(-1, -1);),并在结束时重新启用计时器。