等待 ThreadPool 中的所有线程完成其工作
我有这段代码:
var list = new List<int>();
for(int i=0;i<10;i++) list.Add(i);
for(int i=0;i<10;i++)
{
ThreadPool.QueueUserWorkItem(
new WaitCallback(x => {
Console.WriteLine(x);
}), list[i]);
}
我想知道所有线程池线程何时完成其工作。我怎样才能做到这一点?
i have this code:
var list = new List<int>();
for(int i=0;i<10;i++) list.Add(i);
for(int i=0;i<10;i++)
{
ThreadPool.QueueUserWorkItem(
new WaitCallback(x => {
Console.WriteLine(x);
}), list[i]);
}
And i want to know when all threadpools threads finished their work. How i can to do that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您需要自己跟踪这一点。
一种选择是使用计数器和重置事件:
You'll need to track this yourself.
One option for this is to use a counter and a reset event:
在 .NET Framework 4+ 中,使用方便的 System.Threading.CountdownEvent 类:
In .NET Framework 4+ use the handy System.Threading.CountdownEvent class:
我不确定 ThreadPool 是否公开了此类功能,但您可以使用等待句柄,顺便说一下,迭代两次似乎没有必要:
I am not sure if ThreadPool exposes such functionality but you can use wait handles and by the way iterating twice seems unnecessary:
我就是这样做的。
This is how I would do it.
线程池不会告诉您线程何时完成执行,因此工作项必须自行执行。我把代码改成这样:
The thread pool does not tell you when the thread has finished executing, so the work item must do it itself. I changed the code like this: