using System.Threading.Tasks;
public sealed class Program
private readonly ThreadLocal<Random> ThreadLocalRandom = new(() => new Random());
private readonly SemaphoreSlim _lock = new(1);
private int _counter = 0;
public async Task EnsureRunThingsExchange()
await Task.Delay(TimeSpan.FromMilliseconds(ThreadLocalRandom.Value.Next(0, 10)));
Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")} Initialized.");
Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")} Truly serialized: {_counter - 1}.");
public static async Task Main()
await Task.WhenAll(Enumerable.Range(0, 10_000).Select(_ => r.EnsureRunThingsExchange()));