示例#1
0
        public void Parallel_Load_On_Pool()
        {
            var policy = new PoolPolicy <ObjectPoolClassesTests.SomePoolObject>
            {
                FunctionOnCreate = () => new ObjectPoolClassesTests.SomePoolObject {
                    Value = "created"
                },
                ActionOnGet     = o => o.Value = "get",
                ActionOnReturn  = o => o.Value = "returned",
                ActionOnDestroy = o => o.Value = "destroyed",
                MaximumPoolSize = 100,
                InitialPoolSize = 1
            };

            var options = new ParallelOptions {
                MaxDegreeOfParallelism = 10
            };
            var pool = new ObjectPoolConcurrent <ObjectPoolClassesTests.SomePoolObject>(policy)
            {
                IsPoolingEnabled = true
            };

            Assert.That(() =>
                        Parallel.For(0L, 1000, options, (i, loopState) =>
            {
                var someObject = pool.Get();
                pool.Return(someObject);
            }), Throws.Nothing);
            Assert.That(pool.CountActive, Is.EqualTo(0));
            Assert.That(pool.CountInactive, Is.GreaterThan(0));
        }