本文整理汇总了C#中IConnectionPool.Acquire方法的典型用法代码示例。如果您正苦于以下问题:C# IConnectionPool.Acquire方法的具体用法?C# IConnectionPool.Acquire怎么用?C# IConnectionPool.Acquire使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IConnectionPool
的用法示例。
在下文中一共展示了IConnectionPool.Acquire方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Test_Acquire_2ndRequest_Gets_Connection_From_Pool_While_1stRequest_Waits_For_Opening
public void Test_Acquire_2ndRequest_Gets_Connection_From_Pool_While_1stRequest_Waits_For_Opening()
{
//Arrange
var ipEndpoint = UriExtensions.GetEndPoint(_address);
var factoryWithDelay = new Func<ConnectionPool<Connection>, IByteConverter, BufferAllocator, Connection>(
(a, b, c) =>
{
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//remove sleep and use Moq for threads synchronization
Thread.Sleep(500);
return new Connection(a, socket, b, c);
});
_configuration = new PoolConfiguration(MaxSize, 1, WaitTimeout, RecieveTimeout, ShutdownTimeout, SendTimeout, ConnectTimeout, MaxConnectionAcquireCount);
_connectionPool = new ConnectionPool<Connection>(_configuration, ipEndpoint, factoryWithDelay, new DefaultConverter());
_connectionPool.Initialize();
//Act
var connectionFromPool = _connectionPool.Acquire();
var task1 = new Task<IConnection>(() => _connectionPool.Acquire());
var task2 = new Task<IConnection>(() => _connectionPool.Acquire());
task1.Start();
Thread.Sleep(100);
task2.Start();
//enqueue connection to pool
//at this point task2 should get released connection
_connectionPool.Release(connectionFromPool);
Task.WaitAll(task1, task2);
var connectionFromFactory = task1.Result;
var connectionFromPoolReleased = task2.Result;
//Assert
Assert.IsNotNull(connectionFromFactory);
Assert.AreNotEqual(connectionFromPool, connectionFromFactory);
Assert.AreEqual(connectionFromPool, connectionFromPoolReleased);
}