public void Dispose() { m_client.Dispose(); m_mockPool.VerifyAll(); m_mockProtocol.VerifyAll(); m_mockProtocolFactory.VerifyAll(); }
public void MultiThreadedDataAccess() { //first load data for (int i = 0; i < 1000; i++) { var item = new CacheableTypeOk(i, 10000 + i, "aaa", new DateTime(2010, 10, 10), 1500 + i); _client.Put(item); } const int clients = 10; _requestsFinished = new Semaphore(0, clients); //CLIENTS parallel requests: each one uses a channel for (int i = 0; i < clients; i++) { ThreadPool.QueueUserWorkItem(delegate { Thread.CurrentThread.Name = "client thread"; var client = new CacheClient(); var clientChannel = new TcpClientChannel(new TcpClientPool(1, 1, "localhost", _serverPort)); client.Channel = clientChannel; //reload both items by folder name IList <CacheableTypeOk> items = new List <CacheableTypeOk>( client.GetMany <CacheableTypeOk>("IndexKeyValue < 1700")); Assert.AreEqual(items.Count, 200); _requestsFinished.Release(); client.Dispose(); }); } for (int i = 0; i < clients; i++) { _requestsFinished.WaitOne(); } //CLIENTS parallel requests shared channel for (int i = 0; i < clients; i++) { ThreadPool.QueueUserWorkItem(delegate { Thread.CurrentThread.Name = "client thread"; //reload both items by folder name IList <CacheableTypeOk> items = new List <CacheableTypeOk>( _client.GetMany <CacheableTypeOk>("IndexKeyValue < 1700")); Assert.AreEqual(items.Count, 200); _requestsFinished.Release(); }); } for (int i = 0; i < clients; i++) { _requestsFinished.WaitOne(); } }