static async Task Main(string[] args) { var rwl = new AsyncReadersWriterLock(); Console.WriteLine("* Example 1"); // run example 1 var result1 = Example1(rwl); if (!result1.IsCompleted) { await result1; } Console.WriteLine(""); Console.WriteLine("* Example 2"); // run example 2 var result2 = Example2(rwl); if (!result2.IsCompleted) { await result2; } }
private static async ValueTask Example2(AsyncReadersWriterLock rwl) { Console.WriteLine("Before calling UseReaderAsync"); var result = rwl.UseReaderAsync(() => { Console.WriteLine("Reader start"); // no async is used //await Task.Delay(1000); Console.WriteLine("Reader end"); }); Console.WriteLine("After calling UseReaderAsync"); Console.WriteLine(""); if (!result.IsCompleted) { Console.WriteLine("result.IsCompleted == false, awaiting"); await result; Console.WriteLine("await finished"); } else { Console.WriteLine("result.IsCompleted == true, no await is used"); } }
public async void ExecuteSync() { var rwl = new AsyncReadersWriterLock(); var results = new List <int>(); var reader1 = rwl.UseReaderAsync(() => { results.Add(1); return(new ValueTask()); }); var writer2 = rwl.UseWriterAsync(() => { results.Add(2); return(new ValueTask()); }); var reader3 = rwl.UseReaderAsync(() => { results.Add(3); return(new ValueTask()); }); Assert.True(results[0] == 1, "At index 0 should be value 1"); Assert.True(results[1] == 2, "At index 1 should be value 2"); Assert.True(results[2] == 3, "At index 2 should be value 3"); }
public async void ExecuteAsync() { var rwl = new AsyncReadersWriterLock(); var results = new List <int>(); var reader1 = rwl.UseReaderAsync(async() => { await Task.Delay(10); results.Add(1); }); if (!reader1.IsCompleted) { await reader1; } var writer2 = rwl.UseWriterAsync(async() => { await Task.Delay(10); results.Add(2); }); if (!writer2.IsCompleted) { await writer2; } var reader3 = rwl.UseReaderAsync(async() => { await Task.Delay(10); results.Add(3); }); if (!reader3.IsCompleted) { await reader3; } Assert.True(results[0] == 1, "At index 0 should be value 1"); Assert.True(results[1] == 2, "At index 1 should be value 2"); Assert.True(results[2] == 3, "At index 2 should be value 3"); }