Con referencia a esta cita de MSDN sobre la System.Timers.Timer:Sincronización de un método transcurrido Timers.Timer al parar
El evento Timer.Elapsed se eleva en un hilo ThreadPool, así que el evento -el método de gestión podría ejecutarse en un subproceso al mismo tiempo que una llamada a el método Timer.Stop se ejecuta en otro subproceso . Esto puede provocar que se genere el evento transcurrido después de llamar al método de parada . Esta condición de no se puede prevenir simplemente mediante la comparación de la propiedad SignalTime con el momento en que el método Stop se llama, porque el método de control de eventos ya esté ejecutando cuando se llama el método Stop, o podría empiece a ejecutar entre el momento cuando se llama al método Stop y el momento cuando se guarda el tiempo de parada. Si es crítico para evitar que el hilo que llama al método de parada desde la procedimiento mientras que el método de control de eventos aún se está ejecutando, utilice un robusto mecanismo más sincronización tales como la clase Monitor o el método CompareExchange. El código que usa el método CompareExchange puede ser que se encuentra en el ejemplo para el método Timer.Stop .
Puede alguien dar un ejemplo de un "mecanismo de sincronización robusta como la clase Monitor de" para explicar lo que esto significa exactamente?
Creo que significa usar un candado de alguna manera, pero no estoy seguro de cómo implementarlo.
Guau, los cronómetros son realmente bestias insidiosas. : o – Andy
Sí, esto se cae cuando estás en el avión volando a casa. Huff y puff, prueba de estrés al máximo antes de abordar. –
Después de haber reflexionado un poco, parece que crea un Threading.Timer detrás de las escenas, y la devolución de llamada sí se traga excepciones. La implementación del Threading.Timer básico por sí solo parece ser mucho más limpio, así que tendré una lectura sobre eso. – Andy