Рассмотрите приведенный ниже код. Я не хочу создавать несколько экземпляров class Waiter
. (Таким образом, я не могу использовать класс ManualResetEvent)Threadpooling на одном экземпляре класса, как дождаться завершения всех потоков?
using System;
using System.Threading;
public class Waiter
{
static int counter=0;
static int max=20;
public void Start()
{
for (int i = 1; i <= max; i++)
{
ThreadPool.QueueUserWorkItem(DoWork, (object)i);
}
Console.Read();//without this line the application quits before all threads are complete :(
}
public void DoWork(object o)
{
try
{
Thread.Sleep(1000);
}
finally
{
counter++;
Console.WriteLine(counter);
if (counter==max)
{
Console.WriteLine("All threads complete");
}
}
}
}
public class ThreadPoolExample
{
static void Main()
{
Waiter wtr=new Waiter();
wtr.Start();
}
}
У меня есть две проблемы с кодом выше
1> Без Console.Read()
приложение завершает работу, прежде всего нитками конца.
2> Заявление Console.WriteLine("All threads complete");
выполняет два раза.
Как исправить это?