【发布时间】:2012-02-07 19:56:10
【问题描述】:
我有一组 C# (List<Thread>) 中的线程集合,我希望每隔一定时间获取正在积极工作的线程的数量。
目前,我将各个线程在完成时设置为 null。因此:
private int AliveThreads()
{
lock (ThreadCollection)
{
return ThreadCollection.Count(t => t != null);
}
}
我正在尝试使用lock 来避免出现“集合已修改”错误,但这不起作用。我仍然不时收到此错误。
还有其他更好的方法吗?
【问题讨论】:
-
您是否有某些原因不只是将它们从集合中删除?
-
@Galactic 他们被重复使用;队列中的作业在线程可用时被分配给线程(空),这样我就可以让例如 20 个线程忙于做某事。
-
但您实际上并没有重用任何东西,您实际上是在尝试重新创建线程池。如果您刚刚删除了它们,那么只要您的收藏低于阈值,您就会看到是否可以生成更多。
标签: c# multithreading collections