using System.Threading.Tasks;
public static class Locks
public static readonly AsyncLock ReadLock = new();
public static readonly AsyncLock WriteLock = new();
public class ThreadLikeSomethingProcessor
public static void Main()
for (var i = 0; i < 10; ++i)
var thread = new Thread(DoWork);
private static AwaitableDisposable<IDisposable> ReadData(object num)
AwaitableDisposable<IDisposable> writeLockTask;
var rLock = Locks.ReadLock.Lock();
writeLockTask = Locks.WriteLock.LockAsync();
Console.WriteLine($"read {num}");
private static void WriteData(object num)
Console.WriteLine($"write {num}");
public static void DoWork(object num)
var writeLockTask = ReadData(num);
var lck = writeLockTask.GetAwaiter().GetResult();