按固定间隔启动活动

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"分钟可能不再有效,因为线程将在自己的时间开火.

如何在处理过程中确保报告并行完成?

Chr*_*isF 6

而不是创建自己的线程使用内置的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)

这会创建一个没有延迟的计时器,每秒都会触发.

MSDN页面

第一个整数是在调用回调方法dueTime之前延迟的时间量.指定零会立即启动计时器.

第二个整数是period- 即回调方法的调用之间的时间间隔.

您需要确保您的处理TimerTick时间少于您指定的时间段或确保它可重入 - 即它可以应对在上一次调用完成之前被调用.你是如何做到的 - 或者你是否可以做到 - 取决于你的申请.