예제 #1
0
        public void GetOrAddGroup()
        {
            var strg  = new MyCacheStorage();
            var cache = new CacheManager(strg);

            Action act = () =>
            {
                var res  = cache.Get("a1", () => "v1", typeof(Meal));
                var res2 = cache.Get("a2", () => "v2", typeof(Meal));
                var res3 = cache.Get("a3", () => "v3", typeof(Meal));

                Assert.AreEqual("v1", res);
                Assert.AreEqual("v2", res2);
                Assert.AreEqual("v3", res3);
            };

            Parallel.ForEach(Enumerable.Range(0, 1000), i =>
            {
                Console.WriteLine(i);
                if (i < 900 && i % 3 == 0)
                {
                    cache.RemoveGroup(typeof(Meal));
                }
                else
                {
                    act();
                }
            });

            Console.WriteLine("end parallel exec");

            cache.RemoveGroup(typeof(Meal));
            Assert.AreEqual(0, strg.Data.Count);
        }
예제 #2
0
        public void GetOrAdd()
        {
            var strg  = new MyCacheStorage();
            var cache = new CacheManager(strg);

            Action act = () =>
            {
                var res = cache.Get("a1", () => "v1");

                Assert.AreEqual("v1", res);
            };

            Parallel.ForEach(Enumerable.Range(0, 1000), i =>
            {
                act();
            });

            Assert.AreEqual(1, strg.Data.Count);

            object val;

            strg.Data.TryGetValue("a1", out val);

            Assert.AreEqual("v1", val);
        }
예제 #3
0
        public void RemoveGroupOnChangeAction()
        {
            var strg  = new MyCacheStorage();
            var cache = new CacheManager(strg);

            cache.Get("a1", () => "v1", typeof(Meal));
            cache.Get("a2", () => "v2", typeof(Dinner));

            var res21 = cache.Get("a2", () => "v3", typeof(Dinner));

            Assert.AreEqual("v2", res21);

            cache.ChangeAction <Meal>(ChangeType.Edit);

            var res3 = cache.Get("a2", () => "v3", typeof(Dinner));

            Assert.AreEqual("v3", res3);
        }