码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-08-23 14:55:57      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:sea   use   其他   rem   callback   eve   void   lock   wait   

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

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

标签:sea   use   其他   rem   callback   eve   void   lock   wait   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!