只是想知道Timer(线程)是否会在重新执行任务的等待期之前完成执行任务?
答案 0 :(得分:4)
请参阅System.Threading.Timer中的备注:
计时器执行的回调方法应该是可重入的,因为 它在ThreadPool线程上调用。可以执行回调 如果定时器间隔是,则同时在两个线程池线程上 少于执行回调所需的时间,或者所有线程 池线程正在使用中,并且回调多次排队。
因此,对于System.Threading.Timer,答案是否为。
答案 1 :(得分:4)
正如@Clemens所说,System.Threading.Timer
只是继续滴答作响!
如果您想防止重入,可以使用Monitor
,或只使用这样的标志:
int _TimerLock = 0;
void TimerTickSafe( object state )
{
if ( Interlocked.CompareExchange( ref _TimerLock, 1, 0 ) != 0 ) return;
try
{
TimerTick();
}
finally
{
Interlocked.Exchange( ref _TimerLock, 0 );
}
}
如果计时器在前一个刻度线仍在运行时再次打勾,则会默默忽略新的刻度。