Server Timers son una criatura diferente de los hilos de dormir.
Por un lado, en función de la prioridad de su hilo, y qué más se está ejecutando, su hilo de dormir puede o no ser despertado y programado para ejecutarse en el intervalo que solicite. Si el intervalo es lo suficientemente largo, y la precisión de la programación en realidad no importa, Thread.Sleep()
es una opción razonable.
Los temporizadores, por otro lado, pueden aumentar sus eventos en cualquier subproceso, lo que permite una mejor capacidad de programación. El costo de usar temporizadores, sin embargo, es un poco más complejo en su código, y el hecho de que tal vez no pueda controlar qué hilo ejecuta la lógica que activa el evento del temporizador. A partir de los documentos: temporizador basado en servidor
El está diseñado para su uso con los subprocesos de trabajo en un entorno multiproceso . Los temporizadores del servidor se pueden mover entre subprocesos a manejar el evento transcurrido elevado, dando como resultado más precisión que Temporizadores de Windows al generar el evento en tiempo.
Otra consideración es que los temporizadores invocan a su delegado de Elapsed en un subproceso de ThreadPool. Dependiendo de cuánto tiempo consuma y/o su lógica sea complicada, es posible que no desee ejecutarlo en el grupo de subprocesos, es posible que desee un subproceso dedicado. Otro factor con los temporizadores es que si el proceso tarda lo suficiente, el evento del temporizador puede volver a plantearse (concurrentemente) en otro subproceso, lo que puede ser un problema si el código que se está ejecutando no está previsto o estructurado para concurrencia.
No se debe confundir servidor temporizadores con "Windows Timers". Lo último generalmente se refiere a los mensajes WM_TIMER que pueden entregarse en una ventana, lo que permite que una aplicación programe y responda al procesamiento temporizado en su hilo principal sin dormir. Sin embargo, Windows Timers también puede hacer referencia al Win API for low-level timing (que no es lo mismo que WM_TIMER).
y usted tiene el mío. – Alan
@ Alan: y usted tiene el mío – abatishchev
La clase System.Timers.Timer realmente se puede utilizar en una aplicación de modo de usuario tan fácilmente como System.Threading.Timer. Internamente, System.Timers.Timer utiliza System.Threading.Timer para su mecanismo de temporización interno, y solo lo ajusta para controlar los problemas de tiempo de diseño ... –