111,098
社区成员




class CountDownLatch
{
private object lockObj = new Object();
private int counts;
public CountDownLatch(int counts)
{
this.counts = counts;
}
public void Await()
{
lock (lockObj)
{
while (counts > 0)
{
Monitor.Wait(lockObj);
}
}
}
public void CountDown()
{
lock (lockObj)
{
counts--;
Monitor.PulseAll(lockObj);
}
}
}
class Tasks
{
private CountDownLatch latch;
private Object data;
public Tasks(CountDownLatch latch, Object data)
{
this.latch = latch;
this.data = data;
}
public void Analysis(object o)
{
//分析data
System.Threading.Thread.Sleep(new Random().Next(3) * 1000);
this.latch.CountDown();
}
}
CountDownLatch latch = new CountDownLatch(100);
for (int i = 0; i < 100; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(new Tasks(latch, new object()).Analysis), latch);
}
latch.Await();
//全部线程执行完成, 继续