首页 > 编程语言 > 详细

线程池如何等待所有线程执行结束

时间:2017-08-23 14:18:09      阅读:754      评论:0      收藏:0      [点我收藏+]

internal sealed class AClass
{
public int Method(int num)
{
Thread.Sleep(1000);
return num * num;

}
public void UsingCallback(int numToDo)
{
int[] squares = new int[numToDo];
AutoResetEvent done = new AutoResetEvent(false);

//在其他线程上执行任务
for(int n = 0; n < squares.Length; n++)
{
ThreadPool.QueueUserWorkItem(
obj => {
int num = (int)obj;
squares[num] = Method(num);

//最后一个任务,就让主线程继续运行
if(Interlocked.Decrement(ref numToDo) == 0)
{
done.Set();
}
},n);
}
//等待其他所有线程结束运行
done.WaitOne();

for(int n = 0; n < squares.Length; n++)
{
Console.WriteLine("Index{0},Square{1}", n, squares[n]);
}
}
}

线程池如何等待所有线程执行结束

原文:http://www.cnblogs.com/blogs-cjz/p/7417876.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!