class Program
{
static void UseThreads(int numberOfOperations)
{
using (var countdown = new CountdownEvent(numberOfOperations))
{
Console.WriteLine("Scheduling work by creating threads");
for (int i = 0; i < numberOfOperations; i++)
{
var thread = new Thread(() =>
{
Console.WriteLine("current Thread Id={0}", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(TimeSpan.FromSeconds(0.1));
countdown.Signal();
});
thread.Start();
}
countdown.Wait();
Console.WriteLine();
}
}
static void UseThreadPool(int numberOfOperations)
{
using (var countdown = new CountdownEvent(numberOfOperations))
{
Console.WriteLine("Starting work on a threadPool");
for (int i = 0; i < numberOfOperations; i++)
{
ThreadPool.QueueUserWorkItem(x =>
{
Console.WriteLine("current Thread Id={0}", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(TimeSpan.FromSeconds(0.1));
countdown.Signal();
});
}
countdown.Wait();
Console.WriteLine();
}
}
static void Main()
{
const int numberOfOpeartions = 3000;
var sw = new Stopwatch();
sw.Start();
UseThreads(numberOfOpeartions);
sw.Stop();
Console.WriteLine("Excution time using threads:{0}", sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
UseThreadPool(numberOfOpeartions);
sw.Stop();
Console.WriteLine("Execution time using threads:{0}", sw.ElapsedMilliseconds);
}
}