public void Remove (Timer timer)
{
// We do not keep brand new items or those with no due time.
if (timer.next_run == 0 || timer.next_run == Int64.MaxValue)
return;
lock (this) {
// If this is the next item due (index = 0), the scheduler will wake up and find nothing.
// No need to Pulse ()
InternalRemove (timer);
}
}