Мне было интересно, как / возможно ли получить запрос, который удаляет все временные таблицы?
Я пытался что-то придумать, используя tempdb.sys.tables, Время, потраченное на функцию обратного вызова, было проигнорировано в отношении ...
Мне нужен таймер со следующими свойствами:
Независимо от того, сколько раз вызывается start, всегда выполняется только один поток обратного вызова
Время, потраченное на функцию обратного вызова, игнорировалось в отношении интервала. Например, если интервал составляет 100 мс и для выполнения обратного вызова требуется 4000 мс, обратный вызов вызывается через 100 мс, 4100 мс и т. Д.
Я не видел ничего доступного, поэтому написал следующий код. Есть лучший способ это сделать?
/**
* Will ensure that only one thread is ever in the callback
*/
public class SingleThreadedTimer : Timer
{
protected static readonly object InstanceLock = new object();
//used to check whether timer has been disposed while in call back
protected bool running = false;
virtual new public void Start()
{
lock (InstanceLock)
{
this.AutoReset = false;
this.Elapsed -= new ElapsedEventHandler(SingleThreadedTimer_Elapsed);
this.Elapsed += new ElapsedEventHandler(SingleThreadedTimer_Elapsed);
this.running = true;
base.Start();
}
}
virtual public void SingleThreadedTimer_Elapsed(object sender, ElapsedEventArgs e)
{
lock (InstanceLock)
{
DoSomethingCool();
//check if stopped while we were waiting for the lock, we don't want to restart if this is the case..
if (running)
{
this.Start();
}
}
}
virtual new public void Stop()
{
lock (InstanceLock)
{
running = false;
base.Stop();
}
}
}