AsyncEx es una biblioteca de código abierto desarrollada en C# por Stephen Cleary que simplifica la programación asíncrona en .NET.
La programación asíncrona siempre tiene sus dificultadas para implementar correctamente. Esto lleva a errores y comportamientos no deseados y, además, muy difíciles de detectar.
Es aquí donde entra AsyncEx. Proporciona una variedad de tipos y métodos que facilitan la escritura de código asíncrono, reducen la complejidad y mejoran el rendimiento.
Entre las distintas utilidades que proporciona, la más populares y conocidas son AsyncLock, que permite bloquear en una tarea asíncrona, y AsyncManualResetEvent, que permite la sincronización de eventos entre múltiples hilos.
Otras funcionalidades son las colecciones asíncronas y concurrentes, AsyncMonitor, AsyncSemaphore, AsyncCountdownEvent, and AsyncReaderWriterLock, AsyncLazy, AsyncContext.
Cómo usar AsyncEx
Podemos añadir la biblioteca a un proyecto de .NET fácilmente, a través del paquete Nuget correspondiente.
Install-Package Nito.AsyncEx
Aquí tenéis un ejemplo de cómo usar AsyncLock de AsyncEx extraídos de la documentación de la librería
private readonly AsyncLock _mutex = new AsyncLock();
public async Task UseLockAsync()
{
// AsyncLock can be locked asynchronously
using (await _mutex.LockAsync())
{
// It's safe to await while the lock is held
await Task.Delay(TimeSpan.FromSeconds(1));
}
}
AsyncEx es Open Source, y todo el código y documentación está disponible en el repositorio del proyecto en https://github.com/StephenCleary/AsyncEx