public void Bulk_put_reserve_delete_with_multiple_connections() { var pool = ConnectionPool.GetPool(TestConfig.Host, TestConfig.Port); var goSignal = new ManualResetEvent(false); var n = 10000; var enqueue = 7; var dequeue = 5; var data = new List <MemoryStream>(); for (var i = 0; i < n; i++) { data.Add(("data-" + i).AsStream()); } var idx = -1; var r = new Random(); var enqueued = 0; ParameterizedThreadStart enqueueWorker = id => { goSignal.WaitOne(); Thread.Sleep((int)id * 100); Console.WriteLine("enqueue worker {0:00} started", id); var client = new BeanstalkClient(pool); while (true) { var i = Interlocked.Increment(ref idx); if (i >= n) { break; } var item = data[i]; Interlocked.Increment(ref enqueued); client.Put(100, TimeSpan.Zero, TimeSpan.FromMinutes(2), item, item.Length); } client.Dispose(); Console.WriteLine("enqueue worker {0:00} finished", id); }; var dequeued = 0; ParameterizedThreadStart dequeueWorker = id => { goSignal.WaitOne(); Thread.Sleep(500 + (int)id * 100); Console.WriteLine("dequeue worker {0:00} started", id); var client = new BeanstalkClient(pool); while (true) { try { var job = client.Reserve(TimeSpan.Zero); client.Delete(job.Id); Interlocked.Increment(ref dequeued); } catch (TimedoutException) { break; } } client.Dispose(); Console.WriteLine("dequeue worker {0:00} finished", id); }; for (var i = 0; i < dequeue; i++) { new Thread(dequeueWorker).Start(i); } for (var i = 0; i < enqueue; i++) { new Thread(enqueueWorker).Start(i); } Thread.Sleep(1000); goSignal.Set(); while (dequeued < n) { Console.WriteLine("{0}>{1} - busy: {2}, idle: {3}", dequeued, enqueued, pool.ActiveConnections, pool.IdleConnections); Thread.Sleep(200); } Thread.Sleep(1000); Console.WriteLine("{0}>{1} - busy: {2}, idle: {3}", dequeued, enqueued, pool.ActiveConnections, pool.IdleConnections); }
public void Bulk_put_reserve_delete_with_multiple_connections() { var pool = ConnectionPool.GetPool(TestConfig.Host, TestConfig.Port); var goSignal = new ManualResetEvent(false); var n = 10000; var enqueue = 7; var dequeue = 5; var data = new List<MemoryStream>(); for(var i = 0; i < n; i++) { data.Add(("data-" + i).AsStream()); } var idx = -1; var r = new Random(); var enqueued = 0; ParameterizedThreadStart enqueueWorker = id => { goSignal.WaitOne(); Thread.Sleep((int)id * 100); Console.WriteLine("enqueue worker {0:00} started", id); var client = new BeanstalkClient(pool); while(true) { var i = Interlocked.Increment(ref idx); if(i >= n) { break; } var item = data[i]; Interlocked.Increment(ref enqueued); client.Put(100, TimeSpan.Zero, TimeSpan.FromMinutes(2), item, item.Length); } client.Dispose(); Console.WriteLine("enqueue worker {0:00} finished", id); }; var dequeued = 0; ParameterizedThreadStart dequeueWorker = id => { goSignal.WaitOne(); Thread.Sleep(500 + (int)id * 100); Console.WriteLine("dequeue worker {0:00} started", id); var client = new BeanstalkClient(pool); while(true) { try { var job = client.Reserve(TimeSpan.Zero); client.Delete(job.Id); Interlocked.Increment(ref dequeued); } catch(TimedoutException) { break; } } client.Dispose(); Console.WriteLine("dequeue worker {0:00} finished", id); }; for(var i = 0; i < dequeue; i++) { new Thread(dequeueWorker).Start(i); } for(var i = 0; i < enqueue; i++) { new Thread(enqueueWorker).Start(i); } Thread.Sleep(1000); goSignal.Set(); while(dequeued < n) { Console.WriteLine("{0}>{1} - busy: {2}, idle: {3}", dequeued, enqueued, pool.ActiveConnections, pool.IdleConnections); Thread.Sleep(200); } Thread.Sleep(1000); Console.WriteLine("{0}>{1} - busy: {2}, idle: {3}", dequeued, enqueued, pool.ActiveConnections, pool.IdleConnections); }
public void Dispose_disconnects_from_server() { _client.Dispose(); Assert.AreEqual(1, _mockSocket.DisposeCalled); }