Exemple #1
0
        public async Task ExclusiveAccess_Test()
        {
            var exclusiveAccess0 = new ExclusiveAccess <int>();
            var exclusiveAccess1 = new ExclusiveAccess <int>(1);

            Assert.Equal(0, exclusiveAccess0.Value);
            Assert.Equal(1, exclusiveAccess1.Value);

            exclusiveAccess0.Update(u => 2);
            Assert.Equal(2, exclusiveAccess0.Value);

            var t1 = Task.Run(
                () => exclusiveAccess0.Update(
                    v =>
            {
                Thread.Sleep(100);
                return(10);
            }));

            await Task.Delay(10);

            Assert.Equal(10, exclusiveAccess0.Value);

            var t2 = Task.Run(
                () => exclusiveAccess0.Update(
                    v =>
            {
                Thread.Sleep(100);
                return(20);
            }));

            await Task.Delay(20);

            exclusiveAccess0.Use(v => Assert.Equal(20, v));
        }
 public static int Increment(this ExclusiveAccess <int> exclusiveAccess)
 {
     return(exclusiveAccess.Update(v => ++ v));
 }