【发布时间】:2011-03-13 14:30:27
【问题描述】:
这是我第一次真正尝试使用多线程,我想知道如何判断我的所有任务组何时完成运行:
for (int i = 0; i < taskGroups.Count(); i++) {
ThreadStart t = delegate { RunThread(taskGroups[i]); };
new Thread(t).Start();
}
if(allThreadsComplete){ //???
}
任何帮助将不胜感激
附录:
ThreadStart[] threads = new ThreadStart[taskGroups.Count()];
for (int i = 0; i < taskGroups.Count(); i++) {
threads[i] = new ThreadStart[]
threads[i] = delegate { RunThread(taskGroups[i]); };
new Thread(t).Start();
}
bool threadsComplete = false;
while(!threadsComplete){
for(int i=0;i<taskGroups.Count();i++){
if(threads[i].State == complete)
threadsComplete = true;
}
}
【问题讨论】:
-
你的
i变量被所有线程共享。 -
如果从 Slaks 的评论中不清楚 - 在调用
RunThread时,您的两个(或更多)线程可能会启动并观察到相同的i值 -几乎可以肯定是你不想要的东西。 -
此外,如果您正在学习未来的开发工作,最好学习使用任务和任务并行库进行多线程 - 这是一组更新的线程原语对于 .NET。
-
是共享i,我应该在一个循环中创建所有任务,在一个单独的循环中启动所有任务吗?
标签: c# multithreading