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