private static void displayStack(ConcurrentStack <int> numbersStack, int enumerableStartValue, int count) { StringBuilder message = new StringBuilder(); numbersStack.PushRange(Enumerable.Range(enumerableStartValue, count).ToArray()); Thread.Sleep(100); // Force a context change int poppedValue; while (numbersStack.TryPop(out poppedValue)) { message.Append(poppedValue + " "); Thread.Sleep(1); // Force a context change } Console.WriteLine("Thread ({0}) processed: {1}", Thread.CurrentThread.ManagedThreadId, message); }
static void LIFO() { ConcurrentStack <int> stack = new ConcurrentStack <int>(); stack.Push(42); int result; if (stack.TryPop(out result)) { Console.WriteLine("Popped: { 0}", result); } stack.PushRange(new int[] { 1, 2, 3 }); int[] values = new int[2]; stack.TryPopRange(values); foreach (int i in values) { Console.WriteLine(i); } }
static void ConcurrentStackDemo() { var names = new ConcurrentStack <string>(); names.Push("Bob"); names.Push("Alice"); names.Push("Rob"); Console.WriteLine($"After enqueuing, count = {names.Count}"); string item1; //= names.Dequeue(); bool success = names.TryPop(out item1); if (success) { Console.WriteLine("\nRemoving " + item1); } else { Console.WriteLine("queue was empty"); } string item2; //=names.Peek(); success = names.TryPeek(out item2); if (success) { Console.WriteLine("Peeking " + item2); } else { Console.WriteLine("queue was empty"); } Console.WriteLine("Enumerating"); PrintOutCollection(names); Console.WriteLine("\nAfter enumerating, count = " + names.Count); }
static void Main(string[] args) { BlockingCollection <int>[] obj1 = new BlockingCollection <int> [3];; BlockingCollection <int> obj2 = new BlockingCollection <int>(8);; Console.WriteLine("Blocking_Collections_Example"); obj1[0] = new BlockingCollection <int>(boundedCapacity: 10); obj1[1] = new BlockingCollection <int>(boundedCapacity: 10); Task t1 = Task.Factory.StartNew(() => { for (int i = 1; i <= 10; ++i) { obj1[0].Add(i); Thread.Sleep(100); } obj1[0].CompleteAdding(); }); Console.WriteLine("The elements added in thread 1:"); foreach (int num in obj1[0].GetConsumingEnumerable()) { Console.WriteLine(num); } Task t2 = Task.Factory.StartNew(() => { for (int i = 11; i <= 20; ++i) { obj1[1].Add(i); Thread.Sleep(150); } obj1[1].CompleteAdding(); }); Console.WriteLine("The elements added in thread 2:"); foreach (int num in obj1[1].GetConsumingEnumerable()) { Console.WriteLine(num); } while (!obj1[0].IsCompleted || !obj1[1].IsCompleted) { BlockingCollection <int> .TryTakeFromAny(obj1, out int res, TimeSpan.FromSeconds(1)); if (res != default(int)) { Console.WriteLine(res); } } obj2.Add(1); obj2.Add(2); obj2.Add(3); obj2.Add(4); obj2.Add(5); obj2.Add(6); obj2.CompleteAdding(); Console.WriteLine("The elements added:"); foreach (int num in obj2) { Console.WriteLine(num); } int item = obj2.Take(); Console.WriteLine("The number deleted is " + item); Console.WriteLine("Remaining elements:"); foreach (int num in obj2) { Console.WriteLine(num); } // Construct the dictionary ConcurrentDictionary <int, int> cd = new ConcurrentDictionary <int, int>(); // Initialize the dictionary for (int num = 0; num < 10; num++) { cd[num] = num * num; } Console.WriteLine("\n---Elements in dictionary---"); foreach (var val in cd) { Console.WriteLine(val.Key + " " + val.Value); } Console.WriteLine("\nThe square of \"5\" is " + cd[5]); cd.TryRemove(5, out int x); Console.WriteLine("\nElement removed is " + x); Console.WriteLine("\n---After removing---"); foreach (var val in cd) { Console.WriteLine(val.Key + " " + val.Value); } //Concurrent Stack ConcurrentStack <int> stack = new ConcurrentStack <int>(); Console.WriteLine("Concurrent_Stack_Example"); int y; stack.Push(1); stack.Push(2); stack.Push(3); stack.Push(4); stack.Push(5); foreach (int num in stack) { Console.WriteLine(num); } stack.TryPop(out y); Console.WriteLine("The poped value is " + y); int[] i = { 6, 7, 8 }; stack.PushRange(i); foreach (int num in stack) { Console.WriteLine(num); } int count = stack.Count; Console.WriteLine("The number of elements in stack :" + count); }