如何管理c#控制台应用程序中所有正在运行的线程

本文关键字:运行 线程 应用程序 何管理 管理 控制台 | 更新日期: 2023-09-27 17:53:05

我在控制台应用程序中有管理线程并行的问题。
我正在并行运行10个线程。所有线程都在执行特定的任务。
在情况下,如果任何任务是结束/完成,然后做停止/结束线程和立即我开始新的线程实例。
我想要10个线程,所以任何线程都将停止/结束,然后它生成新的线程。
但是每次我想要10个线程在控制台应用程序的运行模式&
应该使用c#控制台应用程序并行工作。
如何在c#控制台应用程序中运行10个线程?

如何管理c#控制台应用程序中所有正在运行的线程

在每个线程结束时给某个共享对象加一个锁(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.aspx

BackgroundWorker让你只处理Begin/End/Progress事件,使调试更少出错。