private void ThreadProcess(object threadIndex) { var rand = new Random(); while (!_stopThread) { try { var addedItem = new KeyValuePair <int, string>((int)threadIndex, Guid.NewGuid().ToString()); ThreadInfoStore.Add(addedItem); Console.WriteLine("Thread {0} add {1}", addedItem.Key, addedItem.Value); var firstItem = ThreadInfoStore.First(); if ((int)threadIndex == firstItem.Key || ThreadInfoStore.Count > _threadInfoStoreSize) { ThreadInfoStore.TryTake(out firstItem); Console.WriteLine("Thread {0} delete {1}", firstItem.Key, firstItem.Value); } Thread.Sleep(rand.Next(300)); } catch (Exception e) { Console.WriteLine(e.Message); } } }
public void ShowStatistic() { Console.WriteLine(new string('=', 20)); foreach (var group in ThreadInfoStore.OrderBy(pair => pair.Key).GroupBy(pair => pair.Key)) { Console.WriteLine("Thread {0} - count = {1}", group.Key, group.Count()); } Console.WriteLine("Max container elements: " + ThreadInfoStore.Count()); }
private void InitStore() { if (ThreadInfoStore != null) { ThreadInfoStore.Dispose(); } if (ThreadStore != null) { ThreadStore.Dispose(); } ThreadInfoStore = new BlockingCollection <KeyValuePair <int, string> >(); ThreadStore = new BlockingCollection <Thread>(); }