Nito.AsyncEx.AsyncLock
A mutual exclusion lock that is compatible with async. Note that this lock is not recursive!
namespace Nito.AsyncEx
{
public sealed class AsyncLock
{
public int Id { get; }
public AsyncLock();
public AsyncLock(IAsyncWaitQueue<IDisposable> queue);
public AwaitableDisposable<IDisposable> LockAsync(CancellationToken cancellationToken);
public AwaitableDisposable<IDisposable> LockAsync();
public IDisposable Lock(CancellationToken cancellationToken);
public IDisposable Lock();
}
}