只是想知道计时器(线程)是否会在任务重新执行的等待期之前完成执行他的任务?
问问题
959 次
2 回答
4
请参阅System.Threading.Timer中的备注:
定时器执行的回调方法应该是可重入的,因为它是在 ThreadPool 线程上调用的。如果计时器间隔小于执行回调所需的时间,或者如果所有线程池线程都在使用并且回调多次排队,则可以在两个线程池线程上同时执行回调。
所以对于 System.Threading.Timer 答案是否定的。
于 2013-01-08T15:29:17.153 回答
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 );
}
}
If the timer ticks again while the previous tick is still running, the new tick will be silently ignored.
于 2013-01-08T15:39:31.787 回答