domingo, 26 de junio de 2016

Receta Multithreading en C# No. 5-2: Operador await en una Expresión Lambda

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la solución
5.1 Operador asincrónico await
5.2 Operador asincrónico async
6. Práctica: Expresión Lambda con Operador Asincrónico await
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

El programador C# puede usar el operador asincrónico await en una expresión lambda. Esta receta multithreading explica cómo usar este operador asincrónico en el cuerpo de declaración, junto con el uso de async en listado de parámetros de la expresión lambda. Para llevar a cabo la demostración programática de esta receta se usará el delegado estándar Func<T, TResult>.

2. Palabras Clave

  • Asincronismo
  • Expresión lambda
  • Sincronismo

3. Problema

Definir la implementación de una expresión lambda usando el operador await.

4. Solución

El cuerpo de la implementación de una expresión lambda puede incluir la invocación de operaciones por medio de await; sin embargo para esto es necesario marcar la firma de la expresión con el operador asincrónico asyncEsta expresión lambda quedará declarada sobre un delegado del tipo Func<T, TResult>.

5. Discusión de la Solución

5.1 Operador asincrónico await

(Nota: En la sección 5.1 de Receta Multithreading en C# No. 5-2: Operador await en una Expresión Lambda se detalla el funcionamiento de este operador.)

5.2 Operador asincrónico async

A través del operador asincrónico el programador C# puede marcar un método, expresión lambda o método anónimo como asincrónico ("async (C# Reference)", 2016). Este un ejemplo para marcar un método nombrado: 
public async Task OperacionAsync()
{
// ...
}

Y para el caso de una expresión lambda: 

async param => {
// ...
}

5.3 Delegado Func<T, TResult>

(Nota: En la sección 2.1 de Delegados en C#: Delegados Func y Action de .NET Framework se explica detallamente el funcionamiento de este tipo de delegado.)

6. Práctica: Composición de una Expresión Lambda con el Operador Asincrónico await

La aplicación consola que se ha construido demuestra cómo definir una expresión lambda especificando en su cuerpo de implementación el operador asincrónico await.

El método ProcesamientoAsincronico() (líneas 26-42) se implementa de la siguiente manera: 
  • Líneas 31-39: Declaración de delegado por medio de la firma Func<T> con la siguiente expresión lambda:
    • Línea 29: Especificación el parámetro nombre antecedido por el operador asincrónico async.
    • Línea 31: Invocación asincrónica de tarea que simula ejecución extendida a través del operador await.
    • Línea 32-36: Retorno con la información del thread en ejecución en la operación asincrónica.
  • Línea 39: Invocación de la expresión lambda por medio del operador asincrónico await.
  • Línea 41: Visualización del resultado de la expresión lambda.
Demostración de la ejecución a través de una aplicación basada en consola construida en Visual Studio 2015
> Prueba de ejecución (online): http://ideone.com/Mg0XL1


En este enlace de GitHub puede encontrar la solución de Visual Studio 2015 y los proyectos asociados a esta receta y otras más: https://github.com/Fhernd/RecetasMultithreadingCSharp

7. Conclusiones

Se ha demostrado que dentro del cuerpo de una expresión lambda es posible usar la función asincrónica await para invocar otras operaciones asincrónicas. Lo anterior siempre y cuando el programador especifique la función asincrónica async en la firma de parámetros de la expresión.

La siguiente receta multithreading explica cómo usar el operador asincrónico await para llamadas asincrónicas consecutivas de tareas.

8. Literatura & Enlaces

Agafonov, E. (2013). Multithreading in C# 5.0 Cookbook. United States: Packt Publishing.
Receta Multithreading en C# No. 5-1: Obtención de Resultados de Tareas Asincrónicas con el Operador await (2016, junio 26). Recuperado desde: http://ortizol.blogspot.com/2016/06/receta-multithreading-en-csharp-no-5-1-obtencion-de-resultados-de-tareas-asincronicas-con-el-operador-await.html
async (C# Reference) (2016, junio 26). Recuperado desde: https://msdn.microsoft.com/en-us/library/hh156513.aspx?f=255&MSPPError=-2147217396
Delegados en C#: Delegados Func y Action de .NET Framework (2016, junio 26). Recuperado desde: http://ortizol.blogspot.com.co/2014/05/delegados-en-csharp--parte-5-delegados-func-y-action-de-dotnet-framework.html


V

No hay comentarios:

Publicar un comentario

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