Actualmente estamos acostumbrados a trabajar con async-await en C#, es una maravilla utilizarlo. Lamentablemente no siempre se puede usar de forma tan transparente. Como desarrollador Xamarin, un escenario muy común es tener que integrar lógica nativa Android/iOS en Xamarin.Forms, funcionalidad que es asíncrona, pero al ser nativa no esta preparada para async-await

Entonces ¿Cómo es asíncrona?

  • En Android puede ser mediante eventos o mediante callbacks.
  • En iOS puede ser mediante callbacks o mediante el patrón delegate.

La solución “fácil” en Xamarin para estos escenarios es… “MessagingCenter”, no soy fan de esa solución, por qué si no se tiene cuidado se vuelve un caos la memoria y luego todo falla y normalmente no tiene sentido usar una herramienta que ayuda a desacoplar para algo que naturalmente no es desacoplado. 

En este vídeo muestro como podemos reemplazar el uso de MessagingCenter utilizando TaskCompletitionSource.

TaskCompletitionSource nos ayuda a convertir funionalidad asíncrona en funcionalidad encapsulada en un tipo  Task y como sabemos algo Task funciona perfecto con async-await cuando hablamos de asincronía.

Durante el ejemplo muestro como integrar lógica Android y iOS en un proyecto Xamarin.Forms, que usa MessagingCenter a un esquema totalmente compatible con async-await.


Humberto Jaimes
Humberto Jaimes

Me gusta ayudar a quienes están comenzando con el desarrollo móvil con Xamarin dando sesiones en línea, presenciales en universidades y también ayudo a las compañías que quieren capacitar a su equipo o en la creación de proyectos.

Leave a Reply

Your email address will not be published.