c# - tiempo - vb threading timer
C#Timer vs Thread in Service (4)
¿Intentó configurar el restablecimiento automático de la propiedad del temporizador en falso y habilitando el temporizador nuevamente cuando el proceso de actualizar los datos ha terminado?
using System;
public class PortChat
{
public static System.Timers.Timer _timer;
public static void Main()
{
_timer = new System.Timers.Timer();
_timer.AutoReset = false;
_timer.Interval = 100;
_timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
_timer.Enabled = true;
Console.ReadKey();
}
static void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//Do database refresh
_timer.Enabled = true;
}
}
Tengo un servicio que golpea una base de datos cada 10 segundos y obtiene los datos si los hay. Lo que pasa es que procesar estos datos puede llevar hasta 30 segundos. Si uso un temporizador con un intervalo de 10 segundos, el servicio obtendrá los mismos datos dos veces.
El efecto que estoy tratando de lograr (solo para la visualización):
while(true)
{
if(Getnrofrows() > 0)
do stuff
else
sleep for 10 sec
}
Ppl diciendo Thread.Sleep es una mala idea en los servicios de producción, ¿cómo hago esto con temporizadores?
/micro
No hay nada de malo en este enfoque. Un hilo que duerme no consume ningún ciclo de CPU.
Si necesita hacer algo exactamente cada X segundos, un temporizador es el camino a seguir. Si, por el contrario, desea pausar durante X segundos, entonces Thread.Sleep es apropiado.
No veo ningún problema con el uso de Sleep en absoluto de lo que podría terminar con un código feo.
Para responder tu pregunta:
public class MyTest
{
System.Threading.Timer _timer;
public MyTest()
{
_timer = new Timer(WorkMethod, 15000, 15000);
}
public void WorkMethod()
{
_timer.Change(Timeout.Infinite, Timeout.Infinite); // suspend timer
// do work
_timer.Change(15000, 15000); //resume
}
}
Thread.Sleep
no está mal en sí mismo en un servicio, solo necesita responder a los comandos de servicio, por lo que su hilo de trabajo no debe ir a dormir durante una hora, sino que necesita dormir durante cortos períodos de tiempo y luego se despierta. y escuchar si la parte del servicio del controlador le dice que se detenga por alguna razón.
Desea hacerlo de modo que si el administrador le dice a su servicio que pare, se detendrá lo suficientemente rápido como para que no reciba ningún mensaje de tiempo de espera en el que el administrador no pueda estar seguro de que su servicio esté detenido y sea seguro reiniciarlo la máquina o similar.