我有一个场景,我想跟踪我的控制台应用程序是活着还是死了(由于异常等等)。
当控制台应用程序正在执行其处理时,我希望有一种机制,它有一个定时器,每N分钟后继续调用一个报告方法,这个方法被调用更新数据库中的时间戳。
所以:
1 - Console application starts
2 - Reports time stamp
3 - Keeps on doing its task (while in parallel it reports again after N seconds)
我知道我可以产生一个线程,让它在“N”分钟后再次睡眠并再次唤醒,但是由于线程可能无法激活直到资源空闲且“N”分钟可能不再有效,因此有多可靠线程会按照自己的时间触发。
如何在处理过程中确保报告并行完成?
答案 0 :(得分:6)
不是创建自己的线程,而是使用内置的Timer:
private DateTime startTime;
private System.Threading.Timer theTimer;
启动计时器:
this.startTime = DateTime.Now;
TimerCallback callback = TimerTick;
this.theTimer = new System.Threading.Timer(callback, null, 0, 1000);
回调方法:
void TimerTick(object stateInfo)
{
TimeSpan currentTime = DateTime.Now - startTime;
// Do your stuff here.
}
这会创建一个没有延迟的计时器,每秒都会触发。
第一个整数是在调用回调方法之前延迟的dueTime
时间。指定零会立即启动计时器。
第二个整数是period
- 即回调 mathod的调用之间的时间间隔。
您需要确保TimerTick
中的处理时间少于指定的时间段或确保它可重入 - 即它可以应对在上一次调用完成之前调用。你是如何做到的 - 或者你是否可以做到 - 取决于你的申请。