martes, 5 de julio de 2016

Receta Multithreading en C# No. 5-5: Manejo de Excepciones en Operaciones Asincrónicas

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Excepciones
6. Práctica: Manejo de Excepciones en Operaciones Asincrónicas
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

El programador debe hacer de sus aplicaciones robustas a través de la manipulación de excepciones que eventualmente pudiera generar las operaciones. En una aplicación basada en procesos asincrónicos, el programador también debe invertir esfuerzos en cuidar los detalles de implementación en busca de posibles fallas en la lógica o uso de elementos de programa del lenguaje. Esta receta multithreading explica cómo controlar el flujo de excepciones en operaciones asincrónicas.

2. Palabras Clave

  • Asincronismo
  • Excepción
  • Operación asincrónica

3. Problema

Controlar el flujo de excepciones en una operación asincrónica.

4. Solución

El modelo de gestión de excepciones de operaciones sincrónicas se modifica para controlar las excepciones de operaciones asincrónicas.

5. Discusión de la Solución

5.1 Excepciones

En la siguiente serie de artículos C# el lector encontrará una amplia explicación del manejo de excepciones en este lenguaje: 

6. Práctica: Manejo de Excepciones en Operaciones Asincrónicas

Esta receta multithreading demuestra tres distintos casos de manipulación de excepciones en operaciones asincrónicas donde están involucrados los operadores asincrónicos async y await.

El método ObtenerInfoAsync(string, int) (líneas 80-85) simula la ejecución de un proceso largo (línea 82) y lanza una excepción de forma intencional (línea 84).


Sobre el método ProcesamientoAsincronico() (líneas 21-72) ocurren las siguientes operaciones: 
  • Líneas 25-33: Aquí se manipula la excepción que genera el método asincrónico ObtenerInfoAsync() del mismo modo que en ejecución sincrónica.
  • Líneas 40-48: Para múltiples tareas que se ejecutan en paralelo no es recomendable este enfoque, debido a que sólo se obtiene la información de excepción del objeto AggregateException.
  • Líneas 56-70: Este enfoque de manejo de excepciones es idóneo para obtener toda la información de las excepciones que eventualmente pudieran generarse en el método ObtenerInfoAsync() (claro está que en este caso particular las excepciones se disparan de forma intencional). En el ciclo foreach se muestra el mensaje de cada una de las excepciones que produjeron las tareas ejecutadas en paralelo.
La siguiente captura muestra cómo ocurren las excepciones de estos tres casos.
Nótese cómo en la segunda parte -2. Múltiples Excepciones- sólo se captura los detalles de excepción de una sola tarea.

7. Conclusiones

Se demostró el proceso de gestión de excepciones en tareas asincrónicas. Las excepciones producidas por un grupo de tareas asincrónicas requiere una gestión especial como se demostró en las líneas 56-70 del código de la sección práctica.

Para comprender el mecanismo de control flujo de sincronización la siguiente receta multithreading explica el comportamiento de cambio de contexto de sincronización.

8. Literatura & Enlaces

Agafonov, E. (2013). Multithreading in C# 5.0 Cookbook. United States: Packt Publishing.
Excepciones en C#: Introducción a las Excepciones (2016, junio 22). Recuperado desde: http://ortizol.blogspot.com.co/2014/06/excepciones-en-csharp-parte-1-introduccion-a-las-excepciones.html
Excepciones en C#: Uso de Excepciones (2016, junio 22). Recuperado desde: http://ortizol.blogspot.com.co/2014/07/excepciones-en-csharp-parte-2-uso-de-excepciones.html
Excepciones en C#: Diseño de Excepciones Personalizadas (2016, junio 22). Recuperado desde: http://ortizol.blogspot.com.co/2014/07/excepciones-en-csharp-parte-3-diseno-de-excepciones-personalizadas.html
Excepciones en C#: Propiedades de la Clase Base System.Exception (2016, junio 22). Recuperado desde: http://ortizol.blogspot.com.co/2014/07/excepciones-en-csharp-parte-4-propiedades-de-la-clase-base-system.exception.html
Excepciones en C#: Ejemplos de Excepciones Comunes (2016, junio 22). Recuperado desde: http://ortizol.blogspot.com.co/2014/07/excepciones-en-csharp-parte-5-ejemplos-de-excepciones-comunes.html


V

No hay comentarios:

Publicar un comentario

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