如何管理c#控制台应用程序中所有正在运行的线程
本文关键字:运行 线程 应用程序 何管理 管理 控制台 | 更新日期: 2023-09-27 17:53:05
我在控制台应用程序中有管理线程并行的问题。
我正在并行运行10个线程。所有线程都在执行特定的任务。
在情况下,如果任何任务是结束/完成,然后做停止/结束线程和立即我开始新的线程实例。
我想要10个线程,所以任何线程都将停止/结束,然后它生成新的线程。
但是每次我想要10个线程在控制台应用程序的运行模式&
应该使用c#控制台应用程序并行工作。
如何在c#控制台应用程序中运行10个线程?
在每个线程结束时给某个共享对象加一个锁(lock (obj){})。然后从线程集合中删除当前线程。如果收集。Count小于10创建一个新的并放入集合中。释放锁
private List<Thread> threads = new List<Thread>();
private void ThreadFunction() {
// do something
// here before the lock
lock (threads) {
threads.Remove(Thread.CurrentThread);
if (thread.Count < 10) {
Thread t = new Thread(ThreadFunction);
threads.Add(t);
t.Start();
}
}
}
确保捕获线程内的所有异常,否则当线程发生异常时,您的代码将失败。也就是说,确保代码的锁部分总是被调用(除了线程装载异常,但这无关紧要)。
但是正如我所说的,我认为你应该使用ThreadPool来完成这样的任务…
关于。net中线程的书是:http://www.albahari.com/threading/这可能会回答你的任何问题。
根据你使用这些线程的目的(我猜你可能在谈论在后台运行事务),你可能想使用BackgroundWorker。
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspxBackgroundWorker让你只处理Begin/End/Progress事件,使调试更少出错。