Timer affidabile in un'applicazione console


103

Sono a conoscenza del fatto che in .NET esistono tre tipi di timer (vedere Confronto delle classi Timer nella libreria di classi .NET Framework ). Ho scelto un timer a thread poiché gli altri tipi possono andare alla deriva se il thread principale è occupato e ho bisogno che sia affidabile.

Il modo in cui questo timer funziona nel controllo del timer viene inserito su un altro thread in modo che possa sempre spuntare insieme al completamento del lavoro sul thread padre quando non è occupato.

Il problema con questo timer in un'applicazione console è che mentre il timer scorre su un altro thread, il thread principale non fa nulla per chiudere l'applicazione.

Ho provato ad aggiungere un while trueciclo, ma poi il thread principale è troppo occupato quando il timer si spegne.

Risposte:


59

Puoi usare qualcosa come Console.ReadLine()bloccare il thread principale, quindi altri thread in background (come i thread del timer) continueranno a funzionare. Puoi anche usare un AutoResetEvent per bloccare l'esecuzione, quindi (quando necessario) puoi chiamare il metodo Set () su quell'oggetto AutoResetEvent per rilasciare il thread principale. Assicurati inoltre che il tuo riferimento all'oggetto Timer non esca dall'ambito e non venga raccolto.


20

Prendi in considerazione l'utilizzo di un ManualResetEvent per bloccare il thread principale alla fine della sua elaborazione e chiamalo Reset()una volta terminata l'elaborazione del timer. Se questo è qualcosa che deve essere eseguito continuamente, considera di spostarlo in un processo di servizio anziché in un'app console.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.