csharp-asynxex

AsyncEx, librería para programación asíncrona en C#

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