多线程 - 程序结束时的清理策略

wei*_*mat 5 c# multithreading termination

以干净的方式完成多线程应用程序的最佳方法是什么?
我在单独的套接字中从主线程启动几个套接字连接,并在主线程中等到我的工作日结束,并使用当前System.Environment.Exit(0)终止它.

这导致其中一个孩子处理未处理的异常.我应该停止列表中的线程吗?我一直不愿意在孩子身上实施任何真正的停顿,因此我想知道最佳做法.套接字都很好地包装了适当的析构函数,用于注销和关闭,但它仍然会导致错误.

Ser*_*kov 2

对于手动创建的线程,您应该将IsBackground属性设置为 true。在这种情况下(如果除主线程之外的所有线程)都将处于后台,您的应用程序在从 Main(string[] arg) 函数返回后会正常关闭。

PS 所有线程池线程都是后台线程。

  • 将所有工作线程设置为后台线程可能会避免进程退出时出现任何死亡呼声,但这很难说是优雅的。一旦所有前台线程结束,后台线程就会终止,即使它们正在做某事。 (5认同)