Utilizo el siguiente código en un sitio web asp.net.Usando System.Timers.Timer en asp.net
Al iniciar la aplicación, llamo InitializeTimer() una vez.
El objetivo del código era ejecutar DoWork() una vez por hora (1 vez por hora).
También quería que el código se ejecutara en diferentes tiempos cada ciclo, así que agregué la parte aleatoria.
El resultado que obtuve fue werid, no puedo encontrar una explicación de por qué ocurre.
El código que se ejecuta la función después de 2 horas, y luego otra vez después de 2 horas, a continuación, después de 3 horas , a continuación, después de 2 horas y 2 horas de nuevo. ****
¿Alguien puede explicar la razón?
using System.Timers;
....
private static random = new Random();
....
public static void InitializeTimer()
{
tTimer = new Timer();
tTimer.AutoReset = true;
tTimer.Interval = TimeSpan.FromHours(1.0).TotalMilliseconds;
tTimer.Elapsed += new ElapsedEventHandler(ClassName1.tMailer_Elapsed);
tTimer.Start();
}
private static void tTimer_Elapsed(object sender, ElapsedEventArgs e)
{
tTimer.Interval += random.Next(-5, 5);
DoWork();
}
Actualización:
Favor de no repetir "el servicio de uso de las ventanas", o "tarea programada". Mi pregunta es para el siguiente código No estoy buscando mejores alternativas. Además, durante esta prueba (10 horas), el sitio web tenía mucho tráfico, ¡no se reinició el grupo!
basa en los siguientes MSDN: (http://msdn.microsoft.com/en-us/library/system.timers.timer.interval.aspx)
Si el intervalo se establece después de que el temporizador ha comenzado, el recuento se pone a cero. Para el ejemplo , si establece el intervalo en 5 segundos y luego establece la propiedad Enabled en true, el recuento comienza en cuando se establece Enabled. Si restablece el intervalo a 10 segundos cuando el recuento es 3 segundos, el evento transcurrido es levantado por primera vez 13 segundos después de que Habilitado se estableció en verdadero.
¿Es posible que la causa del problema sea volver a establecer el intervalo en la función transcurrida?
Lo que significa que cuando se llama a la función tTimer_Elapsed, el recuento es 1hr (mínimo unos milisegundos) y mi código "tTimer.Interval + = random.Next (-5, 5);" está agregando otra hora completa al Intervalo?
Si saca la parte aleatoria, ¿funciona el código como se esperaba? – mpeterson
no sé, el código se está ejecutando en el servidor de producción, no puedo cambiarlo ahora (no lo haré por unos días), por eso hice la pregunta para encontrar una explicación. – RuSh
¿Significa eso que funciona según lo esperado cuando se prueba localmente? – mpeterson