public void Run(StopWatch stopWatch) { stopWatch.Start(); CheckPoint point = stopWatch.Mark("Correlated Requests"); CheckPoint responsePoint = stopWatch.Mark("Correlated Responses"); var pool = new ManagedThreadPool<CorrelatedController>(DoWorker, 10, 10); try { for (int index = 0; index < _attempts; index++) { var controller = new CorrelatedController(_bus, OnSuccess, OnTimeout); pool.Enqueue(controller); } point.Complete(_attempts); _finishedEvent.WaitOne(TimeSpan.FromSeconds(60), true); responsePoint.Complete(_timeouts + _successes); } finally { pool.Dispose(); } Console.WriteLine("Attempts: {0}, Succeeded: {1}, Timeouts: {2}", _attempts, _successes, _timeouts); stopWatch.Stop(); }
public void Run(StopWatch stopWatch) { stopWatch.Start(); CheckPoint point = stopWatch.Mark("Correlated Requests"); CheckPoint responsePoint = stopWatch.Mark("Correlated Responses"); var pool = new ManagedThreadPool <CorrelatedController>(DoWorker, 10, 10); try { for (int index = 0; index < _attempts; index++) { var controller = new CorrelatedController(_bus, OnSuccess, OnTimeout); pool.Enqueue(controller); } point.Complete(_attempts); _finishedEvent.WaitOne(TimeSpan.FromSeconds(60), true); responsePoint.Complete(_timeouts + _successes); } finally { pool.Dispose(); } Console.WriteLine("Attempts: {0}, Succeeded: {1}, Timeouts: {2}", _attempts, _successes, _timeouts); stopWatch.Stop(); }
private void OnSuccess(CorrelatedController obj) { lock (_finishedEvent) { Interlocked.Increment(ref _successes); if (_timeouts + _successes == _attempts) { _finishedEvent.Set(); } } }
private void OnTimeout(CorrelatedController obj) { lock (_finishedEvent) { Interlocked.Increment(ref _timeouts); if (_timeouts + _successes == _attempts) _finishedEvent.Set(); } }
private void DoWorker(CorrelatedController controller) { controller.SimulateRequestResponse(); }