Удалить все временные таблицы для экземпляра

Мне было интересно, как / возможно ли получить запрос, который удаляет все временные таблицы?

Я пытался что-то придумать, используя tempdb.sys.tables, Время, потраченное на функцию обратного вызова, было проигнорировано в отношении ...

Мне нужен таймер со следующими свойствами:

  1. Независимо от того, сколько раз вызывается start, всегда выполняется только один поток обратного вызова

  2. Время, потраченное на функцию обратного вызова, игнорировалось в отношении интервала. Например, если интервал составляет 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();
        }
    }
}
6
задан probably at the beach 31 March 2011 в 17:12
поделиться