public void Concurrency() { var cacheProvider1 = new HttpRuntimeCacheProvider("g"); var cacheProvider2 = new HttpRuntimeCacheProvider("h"); var tasks = new List <Task>(); var total = 10; for (int i = 0; i < total; i++) { if ((Guid.NewGuid().GetHashCode() & 1) == 0) { tasks.Add(new Task(action: x => cacheProvider1.GetOrCreate(x.ToString(), k => x), state: i)); } else { tasks.Add(new Task(action: x => cacheProvider2.GetOrCreate(x.ToString(), k => x), state: i)); } } foreach (var task in tasks) { task.Start(); } Task.WaitAll(tasks.ToArray(), CancellationToken.None); var count1 = cacheProvider1.Count(); var count2 = cacheProvider2.Count(); Assert.AreEqual(count1 + count2, total); cacheProvider1.ExpireAll(); Assert.IsTrue(cacheProvider1.Count() == 0); Assert.IsTrue(cacheProvider2.Count() == count2); }
public void Duplicate2() { var key = Guid.NewGuid().ToString(); //region a 创建 key->val1 var cacheProvider1 = new HttpRuntimeCacheProvider("c"); cacheProvider1.GetOrCreate <Guid>(key, k => Guid.NewGuid()); Assert.IsTrue(((HttpRuntimeCacheProvider)cacheProvider1).Count() == 1); //reigon b 创建 key-val2 var cacheProvider2 = new HttpRuntimeCacheProvider("d"); cacheProvider2.GetOrCreate <Guid>(key, k => Guid.NewGuid()); Assert.IsTrue(cacheProvider2.Count() == 1); //确认reigon a 键 key 与 region b 键 key 对应值不同 Guid val1; var exist1 = cacheProvider1.TryGet <Guid>(key, out val1); Assert.IsTrue(exist1); Guid val2; var exist2 = cacheProvider2.TryGet <Guid>(key, out val2); Assert.IsTrue(exist2); Assert.AreNotEqual(val1, val2); }
public void ExpireAll() { var key = Guid.NewGuid().ToString(); var val = Guid.NewGuid(); HttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider(); var result = cacheProvider.GetOrCreate <Guid>(key, () => val); Assert.AreEqual(result, val); Assert.IsTrue(cacheProvider.Count() > 0); cacheProvider.ExpireAll(); Guid val2; var exist = cacheProvider.TryGet <Guid>(key, out val2); Assert.IsFalse(exist); Assert.AreEqual(val2, Guid.Empty); Assert.IsTrue(cacheProvider.Count() == 0); }
public void Concurrency() { HttpRuntimeCacheProvider cacheProvider1 = (HttpRuntimeCacheProvider)CacheProviderFactory.GetHttpRuntimeCache("g"); HttpRuntimeCacheProvider cacheProvider2 = (HttpRuntimeCacheProvider)CacheProviderFactory.GetHttpRuntimeCache("h"); var tasks = new List <Task>(); for (int i = 0; i < 100; i++) { if ((Guid.NewGuid().GetHashCode() & 1) == 0) { tasks.Add(new Task(action: x => cacheProvider1.GetOrCreate(x.ToString(), k => x), state: i)); } else { tasks.Add(new Task(action: x => cacheProvider2.GetOrCreate(x.ToString(), k => x), state: i)); } } foreach (var task in tasks) { task.Start(); } Task.WaitAll(tasks.ToArray(), CancellationToken.None); var count1 = cacheProvider1.Count(); var count2 = cacheProvider2.Count(); cacheProvider1.ExpireAll(); Assert.IsTrue(cacheProvider1.Count() == 0); Assert.IsTrue(cacheProvider2.Count() == count2); foreach (var entry in System.Web.HttpRuntime.Cache.OfType <DictionaryEntry>()) { Console.WriteLine("{0}: {1}", entry.Key, entry.Value); } }
public void Duplicate() { var key = Guid.NewGuid().ToString(); var val1 = Guid.NewGuid(); //region a 创建 key->val1 HttpRuntimeCacheProvider cacheProvider1 = new HttpRuntimeCacheProvider("a"); var result = cacheProvider1.GetOrCreate<Guid>(key, k => val1); Assert.AreEqual(result, val1); Assert.IsTrue(((HttpRuntimeCacheProvider)cacheProvider1).Count() == 1); //reigon b 确认不存在键 key HttpRuntimeCacheProvider cacheProvider2 = new HttpRuntimeCacheProvider("b"); Assert.IsTrue(cacheProvider2.Count() == 0); Guid val2; var exist = cacheProvider2.TryGet<Guid>(key, out val2); Assert.IsFalse(exist); Assert.AreEqual(val2, Guid.Empty); }
public void Duplicate() { var key = Guid.NewGuid().ToString(); var val1 = Guid.NewGuid(); //region a 创建 key->val1 HttpRuntimeCacheProvider cacheProvider1 = new HttpRuntimeCacheProvider("a"); var result = cacheProvider1.GetOrCreate <Guid>(key, k => val1); Assert.AreEqual(result, val1); Assert.IsTrue(((HttpRuntimeCacheProvider)cacheProvider1).Count() == 1); //reigon b 确认不存在键 key HttpRuntimeCacheProvider cacheProvider2 = new HttpRuntimeCacheProvider("b"); Assert.IsTrue(cacheProvider2.Count() == 0); Guid val2; var exist = cacheProvider2.TryGet <Guid>(key, out val2); Assert.IsFalse(exist); Assert.AreEqual(val2, Guid.Empty); }
public void Duplicate2() { var key = Guid.NewGuid().ToString(); //region a 创建 key->val1 var cacheProvider1 = new HttpRuntimeCacheProvider("c"); cacheProvider1.GetOrCreate<Guid>(key, k => Guid.NewGuid()); Assert.IsTrue(((HttpRuntimeCacheProvider)cacheProvider1).Count() == 1); //reigon b 创建 key-val2 var cacheProvider2 = new HttpRuntimeCacheProvider("d"); cacheProvider2.GetOrCreate<Guid>(key, k => Guid.NewGuid()); Assert.IsTrue(cacheProvider2.Count() == 1); //确认reigon a 键 key 与 region b 键 key 对应值不同 Guid val1; var exist1 = cacheProvider1.TryGet<Guid>(key, out val1); Assert.IsTrue(exist1); Guid val2; var exist2 = cacheProvider2.TryGet<Guid>(key, out val2); Assert.IsTrue(exist2); Assert.AreNotEqual(val1, val2); }
public void ExpireAll() { var key = Guid.NewGuid().ToString(); var val = Guid.NewGuid(); HttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider(); var result = cacheProvider.GetOrCreate<Guid>(key, () => val); Assert.AreEqual(result, val); Assert.IsTrue(cacheProvider.Count() > 0); cacheProvider.ExpireAll(); Guid val2; var exist = cacheProvider.TryGet<Guid>(key, out val2); Assert.IsFalse(exist); Assert.AreEqual(val2, Guid.Empty); Assert.IsTrue(cacheProvider.Count() == 0); }
public void Concurrency() { var cacheProvider1 = new HttpRuntimeCacheProvider("g"); var cacheProvider2 = new HttpRuntimeCacheProvider("h"); var tasks = new List<Task>(); var total = 10; for (int i = 0; i < total; i++) { if ((Guid.NewGuid().GetHashCode() & 1) == 0) { tasks.Add(new Task(action: x => cacheProvider1.GetOrCreate(x.ToString(), k => x), state: i)); } else { tasks.Add(new Task(action: x => cacheProvider2.GetOrCreate(x.ToString(), k => x), state: i)); } } foreach (var task in tasks) { task.Start(); } Task.WaitAll(tasks.ToArray(), CancellationToken.None); var count1 = cacheProvider1.Count(); var count2 = cacheProvider2.Count(); Assert.AreEqual(count1 + count2, total); cacheProvider1.Dump(); cacheProvider2.Dump(); cacheProvider1.ExpireAll(); Assert.IsTrue(cacheProvider1.Count() == 0); Assert.IsTrue(cacheProvider2.Count() == count2); }