using System.Collections.Concurrent;
using System.Threading.Tasks;
public static ConcurrentDictionary<Type, int> Counter = new ConcurrentDictionary<Type, int>();
Counter.AddOrUpdate(GetType(), 1, (type, i) => i + 1);
public class A : BaseClass
public static void Main(string[] args)
for (var i = 0; i < 2; i++)
Console.WriteLine("Creating " + new A());
for (var i = 0; i < 4; i++)
Console.WriteLine("Creating " + new B());
for (var i = 0; i < 1; i++)
Console.WriteLine("Creating " + new C());
Task.WaitAll(t1, t2, t3);
foreach (var item in BaseClass.Counter.Keys)
Console.WriteLine(item + " " + BaseClass.Counter[item]);