本文整理汇总了C#中ObjectPool.Dispose方法的典型用法代码示例。如果您正苦于以下问题:C# ObjectPool.Dispose方法的具体用法?C# ObjectPool.Dispose怎么用?C# ObjectPool.Dispose使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ObjectPool
的用法示例。
在下文中一共展示了ObjectPool.Dispose方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ObjectPoolTestFactory
public void ObjectPoolTestFactory()
{
var factory1 = new Disposable();
var factory2 = new Disposable();
var objectPool = new ObjectPool<Disposable, Disposable>();
objectPool.UpdateFactory(ObjectFactory.Create(factory1, d => d.Create()));
var p3 = objectPool.GetOrCreate();
p3.Dispose();
objectPool.UpdateFactory(ObjectFactory.Create(factory2, d => d.Create()));
Assert.IsTrue(factory1.Disposed);
var p1 = objectPool.GetOrCreate();
var p2 = objectPool.GetOrCreate();
p1.Dispose();
p2.Dispose();
p1 = objectPool.GetOrCreate();
p1.Dispose();
objectPool.Dispose();
factory1.AssertChildrenDisposed();
Assert.AreEqual(1, factory1.Children.Count);
factory2.AssertChildrenDisposed();
Assert.AreEqual(2, factory2.Children.Count);
Assert.IsTrue(factory2.Disposed);
}
示例2: AddInstance_UpToTheLimit_CountersCorrect
public void AddInstance_UpToTheLimit_CountersCorrect()
{
int i = 0;
var pool = new ObjectPool<PoolObject>(
() => new PoolObject((i++).ToString()),
null,
2,
TimeSpan.MaxValue);
Assert.Equal(0, pool.InstanceCount);
Assert.False(pool.HasFreeInstance);
//first instance
PoolObject obj1 = pool.GetInstance();
Assert.Equal(1, pool.InstanceCount);
Assert.False(pool.HasFreeInstance);
//second instance
PoolObject obj2 = pool.GetInstance();
Assert.Equal(2, pool.InstanceCount);
Assert.False(pool.HasFreeInstance);
//third instance
new Thread(() => { pool.ReleaseInstance(obj1);}).Start();
PoolObject obj3 = pool.GetInstance();
Assert.Equal(2, pool.InstanceCount);
Assert.False(pool.HasFreeInstance);
Assert.True(ReferenceEquals(obj3, obj1));
pool.Dispose();
Assert.Equal(0, pool.InstanceCount);
Assert.False(pool.HasFreeInstance);
}
示例3: ObjectPoolTestConcurrency
public void ObjectPoolTestConcurrency()
{
var factories = new List<Disposable> { new Disposable() };
var objectPool = new ObjectPool<Disposable, Disposable>(ObjectFactory.Create(factories[0], d => d.Create()));
var t1 = new Thread(() =>
{
for (int i = 0; i < 500; i++)
{
var p = objectPool.GetOrCreate();
Thread.Sleep(5);
p.Dispose();
}
});
var t2 = new Thread(() =>
{
for (int i = 0; i < 500; i++)
{
var p = objectPool.GetOrCreate();
Thread.Sleep(7);
p.Dispose();
}
});
var t3 = new Thread(() =>
{
for (int i = 0; i < 20; i++)
{
var f = new Disposable();
objectPool.UpdateFactory(ObjectFactory.Create(f, d => d.Create()));
Thread.Sleep(20);
}
});
t1.Start();
t2.Start();
t3.Start();
t1.Join();
t2.Join();
t3.Join();
objectPool.Dispose();
foreach (var f in factories)
{
Assert.IsTrue(f.Disposed);
f.AssertChildrenDisposed();
}
}
示例4: ObjectPoolTestDangling
public void ObjectPoolTestDangling()
{
var factory = new Disposable();
var objectPool = new ObjectPool<Disposable, Disposable>(ObjectFactory.Create(factory, d => d.Create()));
var p1 = objectPool.GetOrCreate();
objectPool.Dispose();
Assert.IsTrue(factory.Disposed);
Assert.AreEqual(1, factory.Children.Count);
Assert.IsFalse(factory.Children[0].Disposed);
// don't throw exception if we return pool too late
p1.Dispose();
}
示例5: ObjectPoolTestDisposed2
public void ObjectPoolTestDisposed2()
{
var objectPool = new ObjectPool<Disposable, Disposable>(ObjectFactory.Create(new Disposable(), d => d.Create()));
objectPool.Dispose();
objectPool.UpdateFactory(ObjectFactory.Create(new Disposable(), d => d.Create()));
}
示例6: CanCallDisposeMoreThanOnce
public void CanCallDisposeMoreThanOnce()
{
using (var objectPool = new ObjectPool<Object>(() => new Object()))
objectPool.Dispose();
}