Est-il une raison d'une Minuterie aurait AutoReset faux, mais puis re-démarrer lui-même lors de son événement écoulée?

Je viens de tombé sur ce code et je ne la comprends pas. Est-il une raison pour utiliser cette conception au lieu de simplement exécuter à nouveau le temps écoulé code avec AutoReset vrai?

private readonly Timer Timer = new Timer();

protected override void OnStart(string[] args)
{
    Logger.InfoFormat("Starting {0}.", ServiceName);

    try
    {
        // If Enabled is set to true and AutoReset is set to false, the Timer raises the Elapsed event only once, the first time the interval elapses.
        Timer.AutoReset = false;
        Timer.Elapsed += Timer_Elapsed;
        Timer.Interval = Settings.Default.ScriptingStatusLifeTime;
        Timer.Start();
    }
    catch (Exception exception)
    {
        Logger.ErrorFormat("An error has occurred while starting {0}.", ServiceName);
        Logger.Error(exception);
        throw;
    }
}

///<summary>
///Whenever the Schedule Service time elapses - go to the ScriptingStatus table
///and delete everything created earlier than 1 hour ago (by default, read from ScriptingStatusLifeTime) 
///</summary>
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
    try
    {
        // ScriptingStatusLifeTime defaults to 60 minutes.
        DateTime deleteUntil = DateTime.Now.AddMilliseconds(Settings.Default.ScriptingStatusLifeTime * -1);

        Logger.InfoFormat("Clearing all ScriptingStatus entries with ControlDate before: {0}.", deleteUntil);
        RemoteActivator.Create<RemoteScriptingStatus>().DeleteUntil(deleteUntil);
    }
    catch (Exception exception)
    {
        Logger.Error(exception);
    }
    finally
    {
        Timer.Start();
    }
}

De plus, je suis à la recherche d'un memoryleak dans le présent code.

Je viens de lire ce post: Si l'autoreset est définie sur false, mon timer être éliminés automatiquement? qui semble impliquer que mon objet Timer doit être éliminé correctement. Je ne vois pas tous les appels à Disposer dans le fichier courant. Je me demandais si ce Timer_Elapsed événement est également l'introduction d'une fuite?

OriginalL'auteur Sean Anderson | 2013-10-01