コード例 #1
0
        public void LazyCache()
        {
            var indexer = new LazyIndexer <int, InternalObject>((id) =>
            {
                return(new InternalObject(id));
            });

            const int instanceCount = 20;

            Parallel.For(0, instanceCount, (id) =>
            {
                //以下代码是在并发状态下运行1000次获取实例的代码,主要测试
                //LazyIndexer.Init在并发状态下也能正常工作
                Parallel.For(0, 1000, (j) =>
                {
                    var obj = indexer.Get(id);
                });
            });

            Assert.AreEqual(indexer.Keys.Length, instanceCount);

            var halfInstanceCount = instanceCount / 2;

            //减去一半
            Parallel.For(0, halfInstanceCount, (id) =>
            {
                Parallel.For(0, 1000, (j) =>
                {
                    indexer.Rmove(id);
                });
            });

            Assert.AreEqual(indexer.Keys.Length, halfInstanceCount);
        }