コード例 #1
0
        public async Task DynamicObjectPool_duplicates_3_to_3()
        {
            var random = new Random(1);
            var myPool = new DynamicObjectPool <MyHeavyObject>(() => new MyHeavyObject(random.Next()), 3, 3);

            var obj1 = await myPool.GetObject(CancellationToken.None);

            var obj2 = new MyHeavyObject(1);

            var obj3Task = myPool.GetObject(CancellationToken.None);

            myPool.PutObject(obj1);

            var obj3 = await obj3Task;

            myPool.PutObject(obj2);
            myPool.PutObject(obj2);
            myPool.PutObject(obj2);
            myPool.PutObject(obj2);
            myPool.PutObject(obj2);
            myPool.PutObject(obj3);

            Assert.AreEqual(0, myPool.ObjectsDisposedCounter, "ObjectsDisposedCounter");
            Assert.AreEqual(2, myPool.ObjectsCreatedCounter, "ObjectsCreatedCounter");
            Assert.AreEqual(3, myPool.ObjectsMaxCounter, "ObjectsMaxCounter");

            myPool.Dispose();
        }
コード例 #2
0
        public async Task DynamicObjectPool_get_timeout()
        {
            var myPool = new DynamicObjectPool <MyHeavyObject>(() => new MyHeavyObject(1), 1, 1);

            CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(5));

            var obj1 = await myPool.GetObject(CancellationToken.None);

            var obj2 = await myPool.GetObject(cancellationTokenSource.Token);

            Assert.IsNull(obj2);

            myPool.Dispose();
        }