public long RunParallel(int count, object param = null,bool infinite=false) { var sw = new Stopwatch(); CyclesCounter = new CounterContainer(); Exceptions = new LockFreeQueue<Exception>(); Results = new LockFreeQueue<object>(); if (count % _maxDegreeOfParallelism != 0) throw new Exception(); var steps = count / _maxDegreeOfParallelism; _runningThreads = _maxDegreeOfParallelism; _eventStart = new ManualResetEventSlim(false); for (int i = 0; i < _maxDegreeOfParallelism; i++) { var from = steps * i; var to = steps * (i + 1); var thread = new Thread(RunTask); thread.Start(new Tuple<int, int, object,bool>(from, to, param, infinite)); _threads.Add(thread); } sw.Start(); _eventStart.Set(); if (_waitForTermination) { while (CyclesCounter.Counter < count) { Thread.Sleep(100); } } else { return 0; } sw.Stop(); return sw.ElapsedMilliseconds; }
public SyncTaskHandlerWithMessageRegistration(string threadName, int waitTimeMs, int batchSize = 0, int batchTimeoutMs = 0) : base(threadName, waitTimeMs, batchSize, batchTimeoutMs) { MessagesCount = new CounterContainer(); }