Temporizadores para utilizar varias tareas (s) -- # campo con multithreading campo con timer camp codereview Relacionados El problema

Timers to use various Task(s)


0
vote

problema

Español

Estoy desarrollando un programa C #, que realiza varias tareas en hilos paralelos. Creé una tarea base y deja que todas las tareas derivadas de esta clase se ejecuten. Solo quiero saber si este enfoque viable que no causará consecuencias imprevistas si varias tareas se ejecutan en conjunto.

  public abstract class BaseTask {      private readonly Timer _taskTimer = new Timer();      // Derived classes to define thier own time Intervals     protected abstract double TimerInterval { get; set; }      public void Start()     {         // Set default Timer -- 10 seconds         TimerInterval = 10000;          _taskTimer.AutoReset = true;         _taskTimer.Interval = TimerInterval;         _taskTimer.Elapsed += ExecuteTask;         _taskTimer.Start();     }      public void Stop()     {         _taskTimer.Stop();     }      public abstract void ExecuteTask(object sender, ElapsedEventArgs e); }   // Derived Task Class  class DerivedTask : BaseTask  {    protected override double TimerInterval     {         get { return 5000; }         set {  }     }      public override void ExecuteTask(object sender, ElapsedEventArgs e)     {         // Do My Derived task operations here     }  }   // Now In Main..  static void Main()  {     DerivedTask dTask = new DerivedTask ();     _dTask .Start();  }   
Original en ingles

I am developing a C# program, which performs various tasks in parallel threads. I created a Base task and let all tasks derived from this class execute. I just want to know if this a viable approach which won't cause unforeseen consequences if various tasks run in conjunction.

public abstract class BaseTask {      private readonly Timer _taskTimer = new Timer();      // Derived classes to define thier own time Intervals     protected abstract double TimerInterval { get; set; }      public void Start()     {         // Set default Timer -- 10 seconds         TimerInterval = 10000;          _taskTimer.AutoReset = true;         _taskTimer.Interval = TimerInterval;         _taskTimer.Elapsed += ExecuteTask;         _taskTimer.Start();     }      public void Stop()     {         _taskTimer.Stop();     }      public abstract void ExecuteTask(object sender, ElapsedEventArgs e); }   // Derived Task Class  class DerivedTask : BaseTask  {    protected override double TimerInterval     {         get { return 5000; }         set {  }     }      public override void ExecuteTask(object sender, ElapsedEventArgs e)     {         // Do My Derived task operations here     }  }   // Now In Main..  static void Main()  {     DerivedTask dTask = new DerivedTask ();     _dTask .Start();  } 
        
 
 

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

No veo ninguna razón para usar la base y las clases derivadas en su caso. Al menos con el contexto que ha proporcionado.

  public class TimerTask {     private readonly Timer _taskTimer;      public TimerTask(Action action, int interval = 10000)     {         _taskTimer = new Timer { AutoReset = true, Interval = interval };         _taskTimer.Elapsed += (_, __) => action();     }      public void Start() { _taskTimer.Start(); }      public void Stop() { _taskTimer.Stop(); } }   

Uso:

  void Main() {     var t1 = new TimerTask(() => Console.WriteLine("t1"), 100);     t1.Start();     Thread.Sleep(1000);     t1.Stop(); }   

System.Timers.Timer65544336 es seguro, pero tiene que asegurarse de que el código su sea seguro.

 

I don't see any reason to use Base and Derived classes in your case. At least with the context you've provided.

public class TimerTask {     private readonly Timer _taskTimer;      public TimerTask(Action action, int interval = 10000)     {         _taskTimer = new Timer { AutoReset = true, Interval = interval };         _taskTimer.Elapsed += (_, __) => action();     }      public void Start() { _taskTimer.Start(); }      public void Stop() { _taskTimer.Stop(); } } 

Usage:

void Main() {     var t1 = new TimerTask(() => Console.WriteLine("t1"), 100);     t1.Start();     Thread.Sleep(1000);     t1.Stop(); } 

System.Timers.Timer is thread-safe, but you have to make sure that your code is thread-safe.

 
 
     
     

Relacionados problema

2  Temporizador en JavaScript  ( Timer in javascript ) 
Esta es mi primera aplicación de JavaScript (está inspirada en este temporizador ). ¿Cómo podría mejorarlo? Tuve que establecer el #include <iostream> usi...

4  Temporizador de eventos Base de datos Capa de interacción  ( Event timers database interaction layer ) 
Acabo de empezar con los conceptos básicos de OOP. Al principio, se veía complicado, pero una vez que acaba de empezar, parecía tan fácil y todo parece funcio...

5  Resumen de la suite de prueba para una simple evaluación de desempeño en Java  ( Abstracting test suite for simple performance evaluation in java ) 
Hoy, me senté para escribir una pequeña prueba de rendimiento para evaluar rápidamente una corazonada que tuvo con respecto a una optimización. El código resu...

3  Linux C ++ Timer Class: ¿Cómo puedo mejorar la precisión?  ( Linux c timer class how can i improve the accuracy ) 
Escribí esta clase hoy, pero estoy tratando de averiguar cómo hacerlo más preciso. Paso en segundos y multiplico por 1000 para hacerlo milisegundos, y el tiem...

3  JavaScript: función del temporizador  ( Javascript timer function ) 
Esta es una función que hice para un temporizador que cuenta hacia abajo y realiza una devolución de llamada al final. Parece que funciona bien, pero creo que...

4  Dormir con la pantalla cuenta abajo  ( Sleep with count down display ) 
Tengo una función de sueño que muestra el tiempo restante en la SEC, se apreciarían algunos comentarios this9 Este código y actualizaciones están dispon...

4  Helper Utilities para una evaluación comparativa más fácil en C  ( Helper utilities for easier benchmarking in c ) 
Tengo esta pequeña biblioteca para medir el tiempo de ejecución en milisegundos y devolver la duración más el resultado: execres.h X4 execres.c ...

4  Aplicación de la consola de temporizador de aceleración  ( Speed cubing timer console application ) 
Este código es mi primera implementación de este estilo de aplicación en la consola. En esencia, un cronómetro con alguna funcionalidad agregada. Estaba int...

4  Salida de una cuenta regresiva en un div  ( Outputting a countdown in a div ) 
Obtuve este código trabajando con el complemento de cuenta regresiva jQuery para tomar una entrada y salida una cadena cuenta regresiva en un div. ¿Hay una ...

19  Plantilla de cronómetro  ( Stopwatch template ) 
A menudo es útil poder el código de tiempo, por ejemplo, para evaluar enfoques alternativos al mismo problema. Debido a que esto es algo que utilizo con frecu...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos