2. Disclaimer
• Vamos a hablar de programación asíncrona.
• No vamos a hablar de:
– Threads (Bueno sí... un poco sí )
– Concurrencia
• Es posible la programación asíncrona con una
sola CPU y con un solo thread
3. Introducción
• Facilitar las llamadas a métodos asíncronos
como si fuesen síncronos
• Async / Await no trata sobre la creación de
métodos asíncronos, trata sobre la llamada a
esos métodos
4. Async
• No significa «este método es asíncrono»
• Significa que el método quiere realizar
llamadas a métodos asíncronos y sincronizarse
con ellos
5. Await
• No significa «espérate (bloqueáte) hasta que
termine la llamada al método asíncrono»
– Eso convertiría el asincronismo en sincronismo
• Significa «Si la tarea asíncrona no ha
terminado, sal del método (y vuelve al
llamador) y marca el código posterior al await
como código a ejecutarse una vez se termine
la tarea
– Callback
6. Task Asynchrony Pattern
• Facilidad para encadenar métodos asíncronos
que devuelven un resultado.
• Si un método async debe devolver un
resultado de tipo T, basta con:
– Declarar el tipo de retorno como Task<T>
– Devolver un objeto T
7. SynchronizationContext
• Await «intenta» llevarte siempre de vuelta donde
estabas
– P.ej. Si usas await desde el thread de UI, el código que
sigue a await intenta ejecutarse en este thread
– El código que sigue a await se ejecuta en el mismo
SynchronizationContext que el código que llamó a
await
• Si este es null, se usa TaskScheduler.Default que suele ser
Threadpool
• WPF y winforms tienen Synchronization Context