using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
public static async Task Main()
Console.WriteLine("--- START ---");
await UseReaderWriterLockSlim();
Console.WriteLine("--- END ---");
public static async Task UseSemaphoreSlim(){
var sem = new SemaphoreSlim(1);
Console.WriteLine($"--- FUNC START {Thread.CurrentThread.ManagedThreadId} ---");
Console.WriteLine($"--- FUNC END {Thread.CurrentThread.ManagedThreadId} ---");
await Task.WhenAll(new [] {
public static async Task UseReaderWriterLockSlim (){
var lockObject = new ReaderWriterLockSlim();
Console.WriteLine($"--- FUNC START {Thread.CurrentThread.ManagedThreadId} ---");
lockObject.EnterWriteLock();
Console.WriteLine($"--- FUNC END {Thread.CurrentThread.ManagedThreadId} ---");
await Task.WhenAll(new [] {