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); } }