public void Lock_then_modify_list() { IDistributedLock memcached = new RedisCacheProvider( ConfigurationManager.AppSettings.Get("cache:redis"), "region7"); var key = "DistributedLock1"; { var list = new List <int>(); var except = new Random().Next(100, 200); var stopwatch = Stopwatch.StartNew(); Parallel.For(0, except, i => { using (memcached.ReleasableLock(key)) { list.Add(i); } }); stopwatch.Stop(); Console.WriteLine("Handle {0} times cost {1}, {2:f2} per sec.", except, stopwatch.Elapsed.TotalSeconds, except / stopwatch.Elapsed.TotalSeconds); Assert.AreEqual(list.Count, except); } { var list = new List <int>(); var except = new Random().Next(1000, 2000); var stopwatch = Stopwatch.StartNew(); Parallel.For(0, except, i => { memcached.ReleasableLock(key); list.Add(i); memcached.UnLock(key); }); stopwatch.Stop(); Console.WriteLine("Handle {0} times cost {1}, {2:f2} per sec.", except, stopwatch.Elapsed.TotalSeconds, except / stopwatch.Elapsed.TotalSeconds); Assert.AreEqual(list.Count, except); } }