示例#1
0
        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;
            }
        }
示例#2
0
        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");
        }