protected override void HashSampleSet(ref ProcessCounters counters) { var lastCount = 0; var unchangedTics = 0; var threadWorker = new ManagedThreadPoolWorker(); threadWorker.AddWork(TaskList); threadWorker.ProcessAllWorkItems(ref counters); while (counters.ProcessedItems < NumberOfItemsToProcess && unchangedTics < WaitBufferInTics) { if (lastCount == counters.ProcessedItems && lastCount > 0) { unchangedTics++; } lastCount = counters.ProcessedItems; if (unchangedTics == WaitBufferInTics) { Console.WriteLine("Exiting all pending work has been completed. Warning some items have not been processed!"); } Thread.Sleep(1000); } }
public void InitializeThreadPool(ref ProcessCounters counter) { InternalCounter = counter; TaskScheduler = new Thread(() => { while (WorkQueue.Any()) { Thread activeThread; lock (WorkQueue) { activeThread = PrepareNewThread(WorkQueue.Peek()); if (activeThread != null) { WorkQueue.Dequeue(); } } if (activeThread == null) { Thread.Sleep(100); continue; } activeThread.Start(); } }); TaskScheduler.Start(); }
public SampleResult RunSampleTest(int sampleSize) { Console.WriteLine($"Attempting to hash [{sampleSize}] values in stress test:"); Console.WriteLine(); TaskList = CreateWorkTasks(sampleSize); var stopwatch = new StopwatchWorker(); stopwatch.Start(); var processCounters = new ProcessCounters(); HashSampleSet(ref processCounters); stopwatch.Stop(); var result = new SampleResult { NumberOfThreads = processCounters.ThreadCount, SucceededItems = processCounters.SuccessCount, FailedItems = processCounters.FailureCount, Duration = stopwatch.ElapsedTime() }; DisplayWorker.DisplayResultSummary(result.SucceededItems, result.FailedItems, result.NumberOfThreads, result.Duration); return(result); }
public void ProcessAllWorkItems(ref ProcessCounters counter) { InternalCounter = counter; ThreadsUsed = new List <int>(); while (WorkQueue.Any()) { lock (WorkQueue) { var workItem = WorkQueue.FirstOrDefault(); ProcessWorkItem(workItem); } } }
protected override void HashSampleSet(ref ProcessCounters counters) { counters.ThreadCount++; foreach (var task in TaskList) { try { task.Execute(); counters.SuccessCount++; } catch (Exception ex) { counters.FailureCount++; Console.WriteLine(ex); } } }
//TODO: Task Parallel Libriary (TPL) - Task Based Asynchronous Programming //https://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx protected override void HashSampleSet(ref ProcessCounters counters) { throw new NotImplementedException(); }
protected abstract void HashSampleSet(ref ProcessCounters counters);