using System.Collections.Concurrent;
using System.Threading.Tasks;
private static IProducerConsumerCollection<Car> cars = new ConcurrentBag<Car>();
public static void Main()
Console.WriteLine("Hello World");
var addBlackCars = Task.Run(() => ProcessBlackCarModels());
var addNonBlackCars = Task.Run(() => ProcessNonBlackCarModels());
Task.WaitAll(addBlackCars, addNonBlackCars);
Console.WriteLine("At present, the repository contains"+cars.Count +" car(s).");
static void ProcessNonBlackCarModels()
car = new Car("1-1 Hyundai Creta", "Pearl");
Console.WriteLine("1 Adding: {car} using task-{Task.CurrentId}");
car = new Car("1-2 Maruti Suzuki Alto 800", "Red");
Console.WriteLine("1 Adding: {car} using task-{Task.CurrentId}");
car = new Car("1-3 Toyota Fortuner Avant", "Bronze");
Console.WriteLine("1 Adding: {car} using task-{Task.CurrentId}");
Console.WriteLine("1 Task-{Task.CurrentId} will try removing one item now.");
cars.TryTake(out removeCar);
Console.WriteLine("1 Tried removing: "+removeCar);
static void ProcessBlackCarModels()
car = new Car("2-1 Toyota Fortuner Attitude", "Black");
Console.WriteLine("2 Adding: "+car);
car = new Car("2-2 Hyundai Creta Abyss", "Black");
Console.WriteLine("2 Adding: "+ car);
Console.WriteLine("2 Task will try removing three items now.");
for (int i = 0; i < 3; i++)
cars.TryTake(out removeCar);
Console.WriteLine("2 Tried removing: "+removeCar);
public Car(string model, string color){_model = model;_color = color;}
public override string ToString()
return "[" + _model +", " + _color+"]";