【发布时间】:2013-02-03 21:10:50
【问题描述】:
我正在做一些 C# 线程。启动线程并将数据传输给它们没有问题,但我在等待它们结束时遇到了问题。
我的代码如下所示。我正在使用Join() 等待线程结束,但由于某种原因我的代码不起作用。
尽管在所有活动线程上调用了Join(),但主线程(即 for 循环)并未被阻塞。
知道我做错了什么吗?
List<Thread> calculationThreads = new List<Thread>();
foreach (string calculation in calculations)
{
if (calculationThreads.Count < 5)
{
Thread calculationThread = new Thread(DoCalculation);
calculationThreads.Add(calculationThread);
calculationThread.Start(threadData);
}
else
{
// Wait for the threads to complete
foreach (Thread calculationThread in calculationThreads)
{
calculationThread.Join();
}
}
}
【问题讨论】:
-
确定计算线程没有全部终止?
-
您是否考虑过使用任务并行库来处理您的线程,而不是像这样明确地执行它?很多有用的方法让你的生活更轻松:msdn.microsoft.com/en-us/library/dd537609.aspx
-
我认为你应该在加入后从 CalculationThreads 集合中删除线程。
-
您确定它根本没有阻塞吗?在我看来,它会阻止前 5 次计算,但由于您永远不会从列表中删除已完成的计算,之后它就会直接通过。
-
为什么你的代码“不起作用”?
标签: c# multithreading join