Cuando empezás a hacer applicaciones asincrónicas en C# todo parece muy simple, casi mágico. Ponés un async acá algunos awaits allá y listo!
Pero luego, cuando empezás a usar asyncs más y más, empiezan los problemas.
Como no conocés muy bien la tecnología empezás a adoptar reglas, reglas que no entendés, pero que seguís. Encontrás estas reglas en StackOverflow (preferiblemente en las respuestas y no en preguntas!) o en blogs. Entonces empezas a crear tu propia versión de los diez mandamientos:
- Usarás
ConfigureAwait(false)
. - No usarás
async void
. - No usarás
.Result
. - Usarás
GetAwaiter().GetResult()
en lugar de.Result
. - Deberás retornar siempre una
Task
. - etc.
No hay nada malo en seguir reglas. Pero yo me cansé de ellás. Quería tener una explicación para cada una. Porque, al final y al cabo, si queres dominar una tecnología, tenés que ir más profundo. Entonces decidí empezar a leer más sobre programación asincrónica. Tratando de encontrar respuestas a preguntas como ”¿Qué demonios sigifica el false en la llamada a ConfigureAwait?” o ”¿Por qué necesito llamar a GetAwaiter()?”, o aún mejor ”¿Qué demonios es un awaiter?”, ”¿SyncronizationContext verdad o mito?”, ”¿Si una Task falla en el bosque y nadie está ahí, emite un sonido?”… ok tal vez no esa.
Así que agregué estos tres libros a mi lista de lectura:
- Concurrency in C# Cookbook, Stephen Cleary. Go to the review
- Async in C# 5.0, Alex Davies
- Pro Asynchronous Programming with .NET
En las próximas semanas voy a estar subiendo las lecciones aprendidas de cada libro, así que te invito a esta aventura asincrónica.
¡No dejes de codear!