Capítulo 8. Interoperabilidad

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Asíncrono, paralelo, reactivo... cada uno de ellos tiene su lugar, pero ¿hasta qué punto funcionan bien juntos?

En este capítulo, veremos varios escenarios de interoperabilidad en los que aprenderás a combinar estos enfoques diferentes. Aprenderás que se complementan, en lugar de competir; hay muy poca fricción en los límites donde un enfoque se encuentra con otro.

8.1 Envolturas asíncronas para métodos "asíncronos" con eventos "completados"

Problema

Hay es un patrón asíncrono más antiguo que utiliza métodos llamados OperationAsync junto con eventos llamados OperationCompleted. Quieres realizar una operación utilizando el patrón asíncrono más antiguo y await el resultado.

Consejo

En OperationAsync y OperationCompleted se denomina Patrón Asíncrono Basado en Eventos (PAE). Vas a envolverlos en un método Task-retorno que sigue el Patrón Asíncrono Basado en Tareas (PAT).

Solución

Utilizando el tipo TaskCompletionSource<TResult>, puedes crear envoltorios para operaciones asíncronas. El tipo TaskCompletionSource<TResult> controla un Task<TResult> y te permite completar la tarea en el momento adecuado.

Este ejemplo define un método de extensión para WebClient que descarga un string. El tipo WebClient define DownloadStringAsync y DownloadStringCompleted. Utilizándolos, puedes definir un método DownloadStringTaskAsync, como éste:

public ...

Get Libro de cocina de la concurrencia en C#, 2ª edición now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.