lunes, 21 de marzo de 2016

Receta Multithreading en C# No. 3-6: Cómo Usar un Objeto Timer

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solution
5.1 Clase Timer
6. Práctica: Ejecución Periódica Método Asincrónico
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Timer es una clase del namespace System.Threading que permite ejecutar de manera periódica un método asincrónico en un pool de threads. En esta receta multithreading en C# se presenta sus generalidades y su uso. En la sección práctica se implementa un ejemplo que ejecuta una operación cada 2 segundos, luego se cambia su periodicidad a 4 segundos; todo esto de forma asincrónica.

2. Palabras Clave

  • Asincronismo
  • Expresión lambda
  • Método asincrónico
  • Pool de threads
  • Temporizador
  • Thread
  • Timer

3. Problema

Ejecutar una operación asincrónica periódicamente.

4. Solución

La clase Timer (System.Threading) permite la ejecución de un método asincrónico localizado en un pool de threads con un período específico.

5. Discusión de la Solución

5.1 Clase Timer

La clase System.Threading.Timer ("Timer Class", 2016) cuenta con el mecanismo de threading para la ejecución de una operación asincrónica con determinada periodicidad.

Esta clase cuenta con los siguientes constructores: 
Constructores clase Timer
Figura 1. Constructores clase Timer ("Timer Class", 2016).
Los constructores que cuentan con cuatro parámetros: los de tipo Int32, Int64, TimeSpan y UInt32 facilitan crear un objeto Timer con tiempo de retardo para su inicio y su periodicidad de ejecución.

6. Práctica: Ejecución Periódica Método Asincrónico

Este ejemplo compromete una implementación básica pero demostrativa para la ejecución periódica de un método asincrónico sobre un pool de threads.

En las líneas 37-46 se declara el método OperacionTemporizada con esta implementación:
  • Línea 40: cómputo de la duración de la ejecución del método asincrónico en el pool de threads.
  • Línea 43-45: presentación mensaje de estado de la ejecución del método asincrónico.
En el método Main (líneas 10-35) se llevan a acabo las siguientes operaciones:
  • Línea 15: anunca al usuario cómo detener el temporizador. Al presionar Enter se detiene la ejecución de la aplicación.
  • Línea 18: se crea la fecha y hora de inicio de la ejecución de la aplicación.
  • Líneas 22-23: se instancia un nuevo objeto Timer con una expresión lambda que invoca indirectamente al método OperacionTemporizada. Se asigna un tiempo de retardo de inicio de 1 segundo y de periodicidad de 2 segundos.
  • Línea 26: detiene la ejecución de Main durante 6 segundos.
  • Línea 29: cambia la periodicidad de ejecución del método OperacionTemporizada con la invocación de Change ("Timer.Change Method", 2016) a 4 segundos.
Compilación:

csc /t:exe EjecucionPeriodicaMetodoAsincronico.cs

Ejecución assembly:

.\EjecucionPeriodicaMetodoAsincronico.exe

Demostración ejecución local:
Ejecución assembly EjecucionPeriodicaMetodoAsincronico.exe
Animación 1. Ejecución assembly EjecucionPeriodicaMetodoAsincronico.exe.

7. Conclusiones

Se comprendió que a través de la clase Timer es posible asignar un tiempo de ejecución periódico a un método asincrónico en el pool de threads. Además, se entendió cómo se puede cambiar la periodicidad a través del método sobrecargado Change de esa misma clase.

En la próxima receta multithreading se estudia el uso de un componente BackgroundWorker, el cual permite organizar operaciones asincrónicas con eventos y manejadores de eventos.

8. Literatura & Enlaces

Agafonov, E. (2013). Multithreading in C# 5.0 Cookbook. United States: Packt Publishing.
Timer Class (System.Threading) (2016, marzo 21). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.threading.timer(v=vs.110).aspx
Timer.Change Method (TimeSpan, TimeSpan) (System.Threading) (2016, marzo 21). Recuperado desde: https://msdn.microsoft.com/en-us/library/317hx6fa(v=vs.110).aspx


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.