如果我想每隔 5 分钟将某些内容保存到我的数据库中,并且我决定为此使用一个单独的线程(如果有更好的方法 - 启发我),那么会更好:
只需创建线程并将其保持睡眠 5 分钟,然后使其调用 Save 函数,然后再次睡眠。或者
如果可能的话,使用 Timer 类(我没有仔细检查它)并对其进行一些倒计时,而在时间结束时 - 调用 Save 函数 - 然后再次开始倒计时。或者
其他方式
PS 如果您愿意,可以提供代码示例。
如果我想每隔 5 分钟将某些内容保存到我的数据库中,并且我决定为此使用一个单独的线程(如果有更好的方法 - 启发我),那么会更好:
只需创建线程并将其保持睡眠 5 分钟,然后使其调用 Save 函数,然后再次睡眠。或者
如果可能的话,使用 Timer 类(我没有仔细检查它)并对其进行一些倒计时,而在时间结束时 - 调用 Save 函数 - 然后再次开始倒计时。或者
其他方式
PS 如果您愿意,可以提供代码示例。
我建议使用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() 中,那么取消 Sleep() 并不容易!
要停止计时器运行,您只需执行以下操作:
_timer.Change(-1, -1);
要重新开始:
_timer.Change(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));
查看文档以System.Threading.Timer
获取更多详细信息。
需要注意的一件事是,调用时间是否onSave()
超过了定时器周期。onSave()
在这种情况下,您可能希望(通过调用)在开始时禁用计时器_timer.Change(-1, -1);
并在结束时重新启用计时器。